37682-vm/core/views.py
Flatlogic Bot 3c67ef4f81 V1
2026-01-21 23:22:59 +00:00

82 lines
3.1 KiB
Python

from django.shortcuts import render, redirect
from django.contrib.auth import login, logout, get_user_model
from django.contrib.auth.decorators import login_required
from django.contrib import messages
from django.contrib.sites.shortcuts import get_current_site
from django.utils.encoding import force_bytes, force_str
from django.utils.http import urlsafe_base64_encode, urlsafe_base64_decode
from django.template.loader import render_to_string
from django.core.mail import EmailMessage
from .models import Profile
from .forms import SignupForm
from .tokens import account_activation_token
User = get_user_model()
def home(request):
if request.user.is_authenticated:
return redirect('dashboard')
return render(request, 'core/index.html')
def signup(request):
if request.user.is_authenticated:
return redirect('dashboard')
if request.method == 'POST':
form = SignupForm(request.POST)
if form.is_valid():
user = form.save(commit=False)
user.is_active = False
user.save()
# Send activation email
current_site = get_current_site(request)
mail_subject = 'Activate your Referral Rewards account.'
message = render_to_string('core/emails/activation_email.html', {
'user': user,
'domain': current_site.domain,
'protocol': 'https' if request.is_secure() else 'http',
'uid': urlsafe_base64_encode(force_bytes(user.pk)),
'token': account_activation_token.make_token(user),
})
to_email = form.cleaned_data.get('email')
email = EmailMessage(
mail_subject, message, to=[to_email]
)
try:
email.send()
messages.success(request, 'Please confirm your email address to complete the registration. Check your inbox.')
except Exception as e:
messages.error(request, f'Error sending email: {str(e)}. Please contact support.')
return redirect('login')
else:
form = SignupForm()
return render(request, 'core/signup.html', {'form': form})
def activate(request, uidb64, token):
try:
uid = force_str(urlsafe_base64_decode(uidb64))
user = User.objects.get(pk=uid)
except(TypeError, ValueError, OverflowError, User.DoesNotExist):
user = None
if user is not None and account_activation_token.check_token(user, token):
user.is_active = True
user.save()
login(request, user)
messages.success(request, 'Thank you for your email confirmation. Now you can enjoy our services.')
return redirect('dashboard')
else:
messages.error(request, 'Activation link is invalid!')
return redirect('home')
@login_required
def dashboard(request):
# Ensure profile exists (though signal should handle it)
profile, created = Profile.objects.get_or_create(user=request.user)
return render(request, 'core/dashboard.html', {'profile': profile})
def logout_view(request):
logout(request)
return redirect('home')