From e40cdee31b09b8e29534a8969ef78ecc172ee9de Mon Sep 17 00:00:00 2001 From: Pablo Moreno Date: Sat, 30 Nov 2024 13:22:09 +0100 Subject: [PATCH] feat: moved users views to web app --- config/models.py | 18 +++++ users/urls.py | 9 +-- users/views.py | 68 ------------------ web/components/views.py | 4 +- .../components/cart/cart_navbar.html | 4 +- web/templates/components/generic/navbar.html | 2 +- .../components/users/user_dropdown.html | 2 +- {users => web}/templates/users/login.html | 2 +- {users => web}/templates/users/register.html | 0 .../templates/users/reset_password.html | 0 web/templates/web/product_detail.html | 38 ++-------- {users => web}/tests/test_login.py | 20 +++--- web/urls.py | 10 ++- web/views.py | 72 ++++++++++++++++++- 14 files changed, 121 insertions(+), 128 deletions(-) create mode 100644 config/models.py rename {users => web}/templates/users/login.html (96%) rename {users => web}/templates/users/register.html (100%) rename {users => web}/templates/users/reset_password.html (100%) rename {users => web}/tests/test_login.py (84%) diff --git a/config/models.py b/config/models.py new file mode 100644 index 0000000..7d55579 --- /dev/null +++ b/config/models.py @@ -0,0 +1,18 @@ +from django.db import models + + +class SingletonModel(models.Model): + class Meta: + abstract = True + + def save(self, *args, **kwargs): + self.pk = 1 + super(SingletonModel, self).save(*args, **kwargs) + + def delete(self, *args, **kwargs): + pass + + @classmethod + def load(cls): + obj, created = cls.objects.get_or_create(pk=1) + return obj diff --git a/users/urls.py b/users/urls.py index 0d2dc8f..df4c419 100644 --- a/users/urls.py +++ b/users/urls.py @@ -1,13 +1,6 @@ from django.urls import path -from users.views import login, logout, register, reset_password - app_name = "users" -urlpatterns = [ - path("login/", login, name="login"), - path("logout/", logout, name="logout"), - path("register/", register, name="register"), - path("reset-password/", reset_password, name="reset-password"), -] +urlpatterns = [] diff --git a/users/views.py b/users/views.py index 907fff5..e69de29 100644 --- a/users/views.py +++ b/users/views.py @@ -1,68 +0,0 @@ -from django.contrib.auth import login as login_user -from django.contrib.auth import logout as logout_user -from django.shortcuts import redirect, render, reverse -from django.views.generic import TemplateView, View - -from users.forms import LoginForm - - -class RedirectionMixin: - redirect_to = "" - - def get_redirection(self): - return reverse(self.redirect_to) - - -class LoginView(View, RedirectionMixin): - template_name = "users/login.html" - redirect_to = "web:index" - login_form_class = LoginForm - - def get_login_form(self, request): - return self.login_form_class(data=request.POST) - - def get(self, request, *args, **kwargs): - if request.user.is_authenticated: - return redirect(self.get_redirection()) - - login_form = self.login_form_class() - return render(request, self.template_name, {"form": login_form}) - - def post(self, request, *args, **kwargs): - login_form = self.get_login_form(request) - - if login_form.is_valid(): - login_user(request, login_form.get_user()) - - if not login_form.cleaned_data.get('remember_me'): - request.session.set_expiry(0) - - return redirect(self.get_redirection()) - - return render(request, self.template_name, {"form": login_form}, status=400) - - -class LogoutView(View, RedirectionMixin): - redirect_to = "web:index" - - def get(self, request, *args, **kwargs): - logout_user(request) - return redirect(self.get_redirection()) - - def post(self, request, *args, **kwargs): - logout_user(request) - return redirect(self.get_redirection()) - - -class RegisterView(TemplateView): - template_name = "users/register.html" - - -class ResetPasswordView(TemplateView): - template_name = "users/reset-password.html" - - -login = LoginView.as_view() -logout = LogoutView.as_view() -register = RegisterView.as_view() -reset_password = ResetPasswordView.as_view() diff --git a/web/components/views.py b/web/components/views.py index 223c3e7..02b143b 100644 --- a/web/components/views.py +++ b/web/components/views.py @@ -1,7 +1,7 @@ from django.shortcuts import render from django.views.generic import TemplateView from shop.filters import ProductFilter -from shop.models import Product, Cart +from shop.models import Product, Cart, ProductPrice from web.mixins import FilteredQuerysetMixin, PaginatedQuerysetMixin from web.settings import ANONYMOUS_CART_ID_COOKIE_NAME from web.utils import get_or_create_cart @@ -9,7 +9,7 @@ from web.utils import get_or_create_cart class ListProducts(TemplateView, FilteredQuerysetMixin, PaginatedQuerysetMixin): template_name = "web/list_products.html" - queryset = Product.objects.all() + queryset = Product.objects.all().prefetch_related('images', ) filter_class = ProductFilter def get_context_data(self, **kwargs): diff --git a/web/templates/components/cart/cart_navbar.html b/web/templates/components/cart/cart_navbar.html index 7dc320b..78c7935 100644 --- a/web/templates/components/cart/cart_navbar.html +++ b/web/templates/components/cart/cart_navbar.html @@ -27,8 +27,8 @@