from django.views.generic import TemplateView, View from django.shortcuts import render, reverse, redirect from users.forms import LoginForm from django.contrib.auth import login as login_user, logout as logout_user class RedirectionMixin: redirect_to = "" def get_redirection(self): return reverse(self.redirect_to) class LoginView(View, RedirectionMixin): template_name = "users/login.html" redirect_to = "shop: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()) return redirect(self.get_redirection()) return render(request, self.template_name, {"form": login_form}, status=400) class LogoutView(View, RedirectionMixin): redirect_to = "shop: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()