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