From 2bc278ae92b4f1de7ed2116a86a6b9ed46b0845a Mon Sep 17 00:00:00 2001 From: Jan Dittberner Date: Sat, 17 Jan 2015 15:42:47 +0100 Subject: [PATCH] implement login and logout - add LogoutView to dashboard app - define logout URL pattern - only use login view from django.contrib.auth.views instead of including all auth URLs - change base template to support login/logout - add template dashboard/user_dashboard.html --- gnuviechadmin/dashboard/urls.py | 3 ++ gnuviechadmin/dashboard/views.py | 29 +++++++++++++++++-- gnuviechadmin/gnuviechadmin/urls.py | 4 +-- gnuviechadmin/templates/base.html | 16 +++++++--- .../templates/dashboard/user_dashboard.html | 12 ++++++++ 5 files changed, 55 insertions(+), 9 deletions(-) create mode 100644 gnuviechadmin/templates/dashboard/user_dashboard.html diff --git a/gnuviechadmin/dashboard/urls.py b/gnuviechadmin/dashboard/urls.py index f7172d8..58a103b 100644 --- a/gnuviechadmin/dashboard/urls.py +++ b/gnuviechadmin/dashboard/urls.py @@ -4,6 +4,7 @@ from django.conf.urls import patterns, url from .views import ( IndexView, + LogoutView, UserDashboardView, ) @@ -13,4 +14,6 @@ urlpatterns = patterns( url(r'^$', IndexView.as_view(), name='dashboard'), url(r'^user/(?P[\w0-9@.+-_]+)/$', UserDashboardView.as_view(), name='customer_dashboard'), + url(r'^logout/', + LogoutView.as_view(), name='logout'), ) diff --git a/gnuviechadmin/dashboard/views.py b/gnuviechadmin/dashboard/views.py index aa1d7f4..eec7df6 100644 --- a/gnuviechadmin/dashboard/views.py +++ b/gnuviechadmin/dashboard/views.py @@ -4,11 +4,14 @@ This module defines the views for the gnuviechadmin customer dashboard. """ from __future__ import unicode_literals +from django.http import HttpResponseForbidden from django.views.generic import ( DetailView, TemplateView, ) -from django.contrib.auth import get_user_model +from django.views.generic.base import RedirectView +from django.utils.translation import ugettext as _ +from django.contrib.auth import get_user_model, logout from braces.views import LoginRequiredMixin @@ -21,11 +24,33 @@ class IndexView(TemplateView): template_name = 'dashboard/index.html' -class UserDashboardView(DetailView, LoginRequiredMixin): +class UserDashboardView(LoginRequiredMixin, DetailView): """ This is the user dashboard view. """ model = get_user_model() + context_object_name = 'dashboard_user' slug_field = 'username' template_name = 'dashboard/user_dashboard.html' + + def dispatch(self, request, *args, **kwargs): + if (request.user.is_staff or request.user == self.get_object()): + return super(UserDashboardView, self).dispatch( + request, *args, **kwargs + ) + return HttpResponseForbidden( + _('You are not allowed to view this page.') + ) + +class LogoutView(RedirectView): + pattern_name = 'dashboard' + + def get(self, *args, **kwargs): + logout(self.request) + return super(LogoutView, self).get(*args, **kwargs) + + def get_redirect_url(self, *args, **kwargs): + if 'next' in self.request.GET: + return self.request.GET['next'] + return super(LogoutView, self).get_redirect_url(*args, **kwargs) diff --git a/gnuviechadmin/gnuviechadmin/urls.py b/gnuviechadmin/gnuviechadmin/urls.py index c00f384..73b5f0d 100644 --- a/gnuviechadmin/gnuviechadmin/urls.py +++ b/gnuviechadmin/gnuviechadmin/urls.py @@ -5,15 +5,13 @@ from django.conf import settings import dashboard.urls -from django.contrib.auth import urls as auth_urls - from django.contrib import admin admin.autodiscover() urlpatterns = patterns( '', url(r'', include(dashboard.urls)), - url(r'^auth/', include(auth_urls)), + url(r'^accounts/login/$', 'django.contrib.auth.views.login', name='login'), url(r'^admin/', include(admin.site.urls)), ) diff --git a/gnuviechadmin/templates/base.html b/gnuviechadmin/templates/base.html index 6d43ecb..dde360f 100644 --- a/gnuviechadmin/templates/base.html +++ b/gnuviechadmin/templates/base.html @@ -1,4 +1,4 @@ -{% load staticfiles %} +{% load staticfiles i18n %} @@ -32,21 +32,29 @@