You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
TeamFlash/sahara/main/views.py

98 lines
3.5 KiB

from django.shortcuts import render, redirect,HttpResponse,get_list_or_404
from django.contrib.auth import login, logout, authenticate
from django.contrib.auth.tokens import default_token_generator
from django.utils.http import urlsafe_base64_decode
from django.contrib.auth.decorators import login_required
from django.contrib import messages
from .models import User,Service
from .forms import UserRegistrationForm
import logging
logger = logging.getLogger('main')
def home(request):
category = request.GET.get('category')
services = Service.objects.all()
if category:
try:
service = Service.objects.get(id=category)
service_providers = User.objects.filter(service_offered=service)
except Service.DoesNotExist:
service_providers = []
else:
service_providers = User.objects.filter(service_offered__isnull=False)
context = {
'service_providers': service_providers,
'services': services
}
return render(request, "main/home.html", context)
def register(request):
if request.method == 'POST' and request.FILES:
form = UserRegistrationForm(request.POST,request.FILES, instance=request.user)
if form.is_valid():
user = form.save(commit=False)
user.set_password(form.cleaned_data['password'])
user.save()
try:
user.send_verification_email()
messages.success(request, 'Registration successful! Please check your email to activate your account.')
except Exception as e:
logger.error(f"Error sending verification email: {e}")
messages.error(request, e)
return redirect('login')
else:
form = UserRegistrationForm()
messages.error(request, 'email already exists')
return render(request, 'main/register.html', {'form': form})
def activate_account(request, uidb64, token):
try:
uid = urlsafe_base64_decode(uidb64).decode()
user = User.objects.get(pk=uid)
except (TypeError, ValueError, OverflowError, User.DoesNotExist):
user = None
if user is not None and default_token_generator.check_token(user, token):
user.is_active = True
user.save()
messages.success(request, 'Your account has been activated. You can now log in.')
return redirect('login')
else:
messages.error(request, 'Invalid activation link.')
return redirect('register')
def user_login(request):
print(request.user.is_authenticated)
if request.user.is_authenticated:
return redirect('home')
else:
if request.method == 'POST':
email = request.POST['email']
password = request.POST['password']
user = authenticate(request, email = email, password = password)
if user is not None:
form = login(request, user)
messages.success(request, f' welcome {user} !!')
return redirect('home')
else:
messages.info(request, f'Something went wrong')
messages.info(request, f'You are Already Logged in as {request.user}')
return render(request, 'main/login.html', {'title':'log in'})
@login_required
def user_logout(request):
logout(request)
messages.success(request, 'You have been logged out.')
return redirect('login')
# def verify_email(request, uidb64, token):
# # This view is redundant if it does the same as activate_account
# # Consider removing or assigning a different purpose
# pass