All checks were successful
Build and Push Docker Image / build (push) Successful in 43s
- 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
107 lines
3.7 KiB
Python
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"
|