from django.shortcuts import render, redirect,HttpResponse 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 from .forms import UserRegistrationForm, UserLoginForm import logging logger = logging.getLogger('main') def home(request): return render(request,"main/home.html") def register(request): if request.method == 'POST': form = UserRegistrationForm(request.POST) 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, 'Error sending verification email. Please try again later.') return redirect('login') else: form = UserRegistrationForm() 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') 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'account done not exit plz sign in') 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