mirror of
https://github.com/pacnpal/thrillwiki_django_no_react.git
synced 2025-12-20 07:11:08 -05:00
profile changes
This commit is contained in:
@@ -18,7 +18,7 @@ from django.contrib.sites.shortcuts import get_current_site
|
||||
from django.db.models import Prefetch
|
||||
from django.http import HttpResponseRedirect
|
||||
from django.urls import reverse
|
||||
from accounts.models import User, PasswordReset
|
||||
from accounts.models import User, PasswordReset, TopList, EmailVerification
|
||||
from reviews.models import Review
|
||||
from email_service.services import EmailService
|
||||
from allauth.account.views import LoginView, SignupView
|
||||
@@ -101,16 +101,8 @@ class ProfileView(DetailView):
|
||||
context['recent_reviews'] = reviews_queryset
|
||||
|
||||
# Get user's top lists with optimized queries
|
||||
context['top_lists'] = user.top_lists.select_related(
|
||||
'user',
|
||||
'user__profile'
|
||||
).prefetch_related(
|
||||
Prefetch('items', queryset=(
|
||||
user.top_lists.through.objects.select_related(
|
||||
'content_type'
|
||||
).prefetch_related('content_object')
|
||||
))
|
||||
).order_by('-created_at')[:5]
|
||||
top_lists_queryset = TopList.objects.filter(user=user).select_related('user', 'user__profile').prefetch_related('items')
|
||||
context['top_lists'] = top_lists_queryset.order_by('-created_at')[:5]
|
||||
|
||||
return context
|
||||
|
||||
@@ -128,8 +120,7 @@ class SettingsView(LoginRequiredMixin, TemplateView):
|
||||
if action == 'update_profile':
|
||||
# Handle profile updates
|
||||
user = request.user
|
||||
user.first_name = request.POST.get('first_name', user.first_name)
|
||||
user.last_name = request.POST.get('last_name', user.last_name)
|
||||
user.profile.display_name = request.POST.get('display_name', user.profile.display_name)
|
||||
|
||||
if 'avatar' in request.FILES:
|
||||
user.profile.avatar = request.FILES['avatar']
|
||||
@@ -150,7 +141,37 @@ class SettingsView(LoginRequiredMixin, TemplateView):
|
||||
return HttpResponseRedirect(reverse('account_login'))
|
||||
else:
|
||||
messages.error(request, 'Current password is incorrect')
|
||||
|
||||
|
||||
elif action == 'change_email':
|
||||
# Handle email change with verification
|
||||
new_email = request.POST.get('new_email')
|
||||
if new_email:
|
||||
token = get_random_string(64)
|
||||
EmailVerification.objects.update_or_create(
|
||||
user=request.user,
|
||||
defaults={'token': token}
|
||||
)
|
||||
site = get_current_site(request)
|
||||
verification_url = reverse('verify_email', kwargs={'token': token})
|
||||
context = {
|
||||
'user': request.user,
|
||||
'verification_url': verification_url,
|
||||
'site_name': site.name,
|
||||
}
|
||||
email_html = render_to_string('accounts/email/verify_email.html', context)
|
||||
EmailService.send_email(
|
||||
to=new_email,
|
||||
subject='Verify your new email address',
|
||||
text='Click the link to verify your new email address',
|
||||
site=site,
|
||||
html=email_html
|
||||
)
|
||||
request.user.pending_email = new_email
|
||||
request.user.save()
|
||||
messages.success(request, 'Verification email sent to your new email address')
|
||||
else:
|
||||
messages.error(request, 'New email is required')
|
||||
|
||||
return self.get(request, *args, **kwargs)
|
||||
|
||||
def request_password_reset(request):
|
||||
|
||||
Reference in New Issue
Block a user