Files
santeh-ray/users/views.py
Azimkin ad962d946b
All checks were successful
Build and Push Docker Image / build (push) Successful in 43s
feat: update order payment methods and refine profile edit functionality
- Replaced `Order.PaymentMethod` options with "cash" and "card" while adjusting related code and templates
- Set "cash" as the default payment method for orders and checkout forms
- Added profile editing functionality with `ProfileForm`, allowing users to update names
- Improved feedback messages across profile and order management templates
- Updated catalog to handle empty filter results with a "reset filters" option
2026-05-30 12:25:19 +02:00

107 lines
3.7 KiB
Python

from django.contrib import messages
from django.contrib.auth import get_user_model, login as auth_login, logout as auth_logout
from django.contrib.auth.decorators import login_required
from django.contrib.auth.tokens import default_token_generator
from django.contrib.auth.views import (
PasswordResetCompleteView,
PasswordResetConfirmView,
PasswordResetDoneView,
PasswordResetView,
)
from django.shortcuts import redirect, render
from django.urls import reverse_lazy
from django.utils.encoding import force_str
from django.utils.http import urlsafe_base64_decode
from django.views.decorators.http import require_http_methods
from users.forms import LoginForm, ProfileForm, RegisterForm, SantehRayPasswordResetForm, SantehRaySetPasswordForm
from users.services import send_activation_email
User = get_user_model()
# Create your views here.
@require_http_methods(["GET", "POST"])
def login(request):
if request.user.is_authenticated:
return redirect("users:profile")
form = LoginForm(request=request, data=request.POST or None)
if request.method == "POST" and form.is_valid():
auth_login(request, form.get_user())
return redirect("users:profile")
return render(request, "users/login.html", context={"form": form})
@require_http_methods(["GET", "POST"])
def register(request):
if request.user.is_authenticated:
return redirect("users:profile")
form = RegisterForm(request.POST or None)
if request.method == "POST" and form.is_valid():
user = form.save()
send_activation_email(request, user)
return render(request, "users/register_done.html", context={"email": user.email})
return render(request, "users/register.html", context={"form": form})
@require_http_methods(["POST"])
def logout(request):
auth_logout(request)
return redirect("users:login")
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 and default_token_generator.check_token(user, token):
user.is_active = True
user.save(update_fields=["is_active"])
auth_login(request, user)
return render(request, "users/activation_success.html", context={"user": user})
return render(request, "users/activation_invalid.html", status=400)
@login_required
@require_http_methods(["GET", "POST"])
def profile(request):
form = ProfileForm(request.POST or None, instance=request.user)
if request.method == "POST" and form.is_valid():
form.save()
messages.success(request, "Данные профиля обновлены.")
return redirect("users:profile")
return render(request, "users/profile.html", context={"form": form})
class SantehRayPasswordResetView(PasswordResetView):
form_class = SantehRayPasswordResetForm
template_name = "users/password_reset.html"
email_template_name = "users/emails/password_reset_email.txt"
html_email_template_name = "users/emails/password_reset_email.html"
subject_template_name = "users/emails/password_reset_subject.txt"
success_url = reverse_lazy("users:password_reset_done")
class SantehRayPasswordResetDoneView(PasswordResetDoneView):
template_name = "users/password_reset_done.html"
class SantehRayPasswordResetConfirmView(PasswordResetConfirmView):
template_name = "users/password_reset_confirm.html"
success_url = reverse_lazy("users:password_reset_complete")
form_class = SantehRaySetPasswordForm
class SantehRayPasswordResetCompleteView(PasswordResetCompleteView):
template_name = "users/password_reset_complete.html"