From b252379ecc60e0bb97309430b2b472d98a0d843b Mon Sep 17 00:00:00 2001
From: Dorian Lesbre <dorian.lesbre@gmail.com>
Date: Fri, 5 Mar 2021 17:52:06 +0100
Subject: [PATCH] Reworked accounts views

---
 .../templates}/activation_email.html          |  0
 .../templates}/create_account.html            |  0
 .../templates}/login.html                     |  0
 accounts/urls.py                              |  7 +++---
 accounts/views.py                             | 23 +++++++++++++------
 5 files changed, 19 insertions(+), 11 deletions(-)
 rename {home/templates/registration => accounts/templates}/activation_email.html (100%)
 rename {home/templates/registration => accounts/templates}/create_account.html (100%)
 rename {home/templates/registration => accounts/templates}/login.html (100%)

diff --git a/home/templates/registration/activation_email.html b/accounts/templates/activation_email.html
similarity index 100%
rename from home/templates/registration/activation_email.html
rename to accounts/templates/activation_email.html
diff --git a/home/templates/registration/create_account.html b/accounts/templates/create_account.html
similarity index 100%
rename from home/templates/registration/create_account.html
rename to accounts/templates/create_account.html
diff --git a/home/templates/registration/login.html b/accounts/templates/login.html
similarity index 100%
rename from home/templates/registration/login.html
rename to accounts/templates/login.html
diff --git a/accounts/urls.py b/accounts/urls.py
index 47d47d7..752dbc0 100644
--- a/accounts/urls.py
+++ b/accounts/urls.py
@@ -1,13 +1,12 @@
 from django.urls import include, path
-import django.contrib.auth.views as dj_auth_views
 
-from accounts.views import logout_view, ActivateAccountView, CreateAccountView
+from accounts.views import ActivateAccountView, CreateAccountView, LogoutView, LoginView
 
 app_name = "accounts"
 
 urlpatterns = [
-	path("login/", dj_auth_views.LoginView.as_view(), name="login"),
-	path("logout/", logout_view, name="logout"),
+	path("login/", LoginView.as_view(), name="login"),
+	path("logout/", LogoutView.as_view(), name="logout"),
 	path("create/", CreateAccountView.as_view(), name="create"),
 	path('activate/<uidb64>/<token>/', ActivateAccountView.as_view(), name='activate'),
 ]
diff --git a/accounts/views.py b/accounts/views.py
index 903d734..ce64f6d 100644
--- a/accounts/views.py
+++ b/accounts/views.py
@@ -1,7 +1,7 @@
 from django.conf import settings
 from django.contrib import messages
 from django.contrib.auth import authenticate, login, logout
-from django.contrib.auth.decorators import login_required
+from django.contrib.auth.views import LoginView as DjangoLoginView
 from django.contrib.sites.shortcuts import get_current_site
 from django.http import Http404
 from django.utils.encoding import force_bytes, force_text
@@ -16,17 +16,26 @@ from accounts.models import EmailUser
 from accounts.tokens import email_token_generator
 from site_settings.models import SiteSettings
 
-@login_required
-def logout_view(request):
+class LoginView(DjangoLoginView):
+	"""Vue pour se connecter"""
+	template_name = "login.html"
+
+class LogoutView(RedirectView):
 	"""Vue pour se deconnecter"""
-	logout(request)
-	messages.success(request, "Vous avez bien été déconecté·e.")
-	return redirect("home")
+
+	permanent = False
+	pattern_name = "home"
+
+	def get_redirect_url(self, *args, **kwargs):
+		if self.request.user.is_authenticated:
+			logout(self.request)
+		messages.info(self.request, "Vous avez bien été déconnecté·e.")
+		return super().get_redirect_url(*args, **kwargs)
 
 class CreateAccountView(View):
 	"""Vue pour la creation de compte"""
 	form_class = CreateAccountForm
-	template_name = 'registration/create_account.html'
+	template_name = 'create_account.html'
 
 	@staticmethod
 	def check_creation_allowed():
-- 
GitLab