Files
crewli/resources/vuexy-admin-v10.11.1/django-version/full-version/auth/register/views.py

64 lines
2.7 KiB
Python

from django.shortcuts import redirect
from django.contrib.auth.models import User, Group
from django.contrib import messages
from django.conf import settings
from auth.views import AuthView
from auth.helpers import send_verification_email
from auth.models import Profile
import uuid
class RegisterView(AuthView):
def get(self, request):
if request.user.is_authenticated:
# If the user is already logged in, redirect them to the home page or another appropriate page.
return redirect("index") # Replace 'index' with the actual URL name for the home page
# Render the login page for users who are not logged in.
return super().get(request)
def post(self, request):
username = request.POST.get("username")
email = request.POST.get("email")
password = request.POST.get("password")
# Check if a user with the same username or email already exists
if User.objects.filter(username=username, email=email).exists():
messages.error(request, "User already exists, Try logging in.")
return redirect("register")
elif User.objects.filter(email=email).exists():
messages.error(request, "Email already exists.")
return redirect("register")
elif User.objects.filter(username=username).exists():
messages.error(request, "Username already exists.")
return redirect("register")
# Create the user and set their password
created_user = User.objects.create_user(username=username, email=email, password=password)
created_user.set_password(password)
created_user.save()
# Add the user to the 'client' group (or any other group you want to use as default for new users)
user_group, created = Group.objects.get_or_create(name="client")
created_user.groups.add(user_group)
# Generate a token and send a verification email here
token = str(uuid.uuid4())
# Set the token in the user's profile
user_profile, created = Profile.objects.get_or_create(user=created_user)
user_profile.email_token = token
user_profile.email = email
user_profile.save()
send_verification_email(email, token)
if settings.EMAIL_HOST_USER and settings.EMAIL_HOST_PASSWORD:
messages.success(request, "Verification email sent successfully")
else:
messages.error(request, "Email settings are not configured. Unable to send verification email.")
request.session['email'] = email ## Save email in session
# Redirect to the verification page after successful registration
return redirect("verify-email-page")