from django.shortcuts import render, redirect from django.urls import reverse_lazy from django.views.generic.edit import CreateView from django.contrib.auth.decorators import login_required from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin from django.contrib.auth import views as auth_views, login from django.contrib import messages from django.db import Q, IntegrityError from django.http import JsonResponse from .forms import CustomUserCreationForm, CustomUserChangeForm, PlayerCreationForm, PlayerVerificationForm, ParentVerificationForm from .models import CustomUser from .utils import send_verification_email import uuid ... elif new_email: try: parent_user = CustomUser.objects.create( email=new_email, username=new_email, is_active=False ) parent_user.set_unusable_password() parent_user.verification_code = uuid.uuid4() parent_user.save() # Send verification email to new parent send_verification_email(parent_user, self.request, is_parent=True) player.parents.add(parent_user) except IntegrityError: form.add_error(f'parent{i}_new', f"A user with the email '{new_email}' already exists. Please use the search field to add them.") if form.errors: return self.form_invalid(form) ... def verify_account(request, verification_code): user = get_object_or_404(CustomUser, verification_code=verification_code, is_verified=False) # Determine if user is a parent (has no team) or player is_parent = user.team is None FormClass = ParentVerificationForm if is_parent else PlayerVerificationForm if request.method == 'POST': form = FormClass(request.POST) if form.is_valid(): user.set_password(form.cleaned_data['password']) if is_parent: user.username = form.cleaned_data['username'] user.is_active = True user.is_verified = True user.verification_code = None # Invalidate the code user.save() login(request, user) # Log the user in messages.success(request, 'Your account has been verified! You are now logged in.') return redirect('dashboard') else: form = FormClass() return render(request, 'accounts/verify_account.html', {'form': form, 'is_parent': is_parent})