From 6b659144c902516c56d1141e60b9e8d2b8460251 Mon Sep 17 00:00:00 2001 From: Arthur Gerbaud Date: Thu, 1 Dec 2016 11:15:55 +0100 Subject: [PATCH] isolated NavBarMixin --- suivi/views.py | 2 +- utilisateurs/models.py | 9 +++- website/mixins.py | 101 +++++++++++++++++++++-------------------- website/views.py | 2 - 4 files changed, 61 insertions(+), 53 deletions(-) diff --git a/suivi/views.py b/suivi/views.py index 8cef7b8..ea2581d 100644 --- a/suivi/views.py +++ b/suivi/views.py @@ -1,4 +1,4 @@ -from django.shortcuts import render, reverse +from django.shortcuts import render, reverse, redirect from django.views import generic from django.utils import timezone diff --git a/utilisateurs/models.py b/utilisateurs/models.py index f6a3b73..12817be 100644 --- a/utilisateurs/models.py +++ b/utilisateurs/models.py @@ -2,7 +2,7 @@ import datetime from django.db import models -from django.contrib.auth.models import User +from django.contrib.auth.models import User, AnonymousUser # Create your models here. class SingletonModel(models.Model): @@ -20,6 +20,13 @@ class SingletonModel(models.Model): except cls.DoesNotExist: return cls() +## Visiteur + +class Visiteur(AnonymousUser): + + def __str__(self): + return "Visiteur" + class Organisme(models.Model): """ Organisme : Association, Entreprise, Service public, ...""" diff --git a/website/mixins.py b/website/mixins.py index d3f2ead..ffd1ba5 100644 --- a/website/mixins.py +++ b/website/mixins.py @@ -57,54 +57,13 @@ def user_processor(request, context): context['user_group'] = request.user.groups.first() return context -class WebsiteTemplateMixin(TemplateResponseMixin): - """ Mixin for easy integration of 'website' templates - Each child can specify: - - title : title of the page - - header : header of the page - - header_small : sub-header of the page - - If 'content_template' is not defined, value will fallback to template_name - in child view. - """ - base_template = "base_site.html" - content_template = None +class NavbarMixin(object): + registered_apps = ['maraudes', 'suivi'] app_name = None - _user_menu = [] - _admin_menu = [] - _groups = [] - class Configuration: - stylesheets = ['base.css'] - navbar_apps = ['maraudes', 'suivi'] - page_blocks = ['header', 'header_small', 'title'] - - - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - self.user = None - self._page_blocks = [] - if not hasattr(self, "PageInfo"): - raise ImproperlyConfigured("You must define a PageInfo on ", self) - for attr, val in self.PageInfo.__dict__.items(): - if attr[0] is not "_" and type(val) is str: - setattr(self, attr, Template(val)) - self._page_blocks.append(attr) - - def get_template_names(self): - """ Ensure same template for all children views. """ - return [self.base_template] - - def get_content_template(self): - # Ensure easy integration with generic views - if hasattr(self, 'template_name'): - self.content_template = self.template_name - else: - raise ImproperlyConfigured(self, "has no template defined !") - return self.content_template def get_apps_config(self): """ Load additionnal config data on each app registered in navbar @@ -117,7 +76,7 @@ class WebsiteTemplateMixin(TemplateResponseMixin): 'maraudes': 'road', 'suivi': 'eye-open', } - app_names = self.Configuration.navbar_apps + app_names = self.registered_apps self._apps = [] for name in app_names: app_config = apps.get_app_config(name) @@ -162,6 +121,55 @@ class WebsiteTemplateMixin(TemplateResponseMixin): return self._user_menu + self._admin_menu + +class WebsiteTemplateMixin(NavbarMixin, TemplateResponseMixin): + """ Mixin for easy integration of 'website' templates + + Each child can specify: + - title : title of the page + - header : header of the page + - header_small : sub-header of the page + + If 'content_template' is not defined, value will fallback to template_name + in child view. + """ + base_template = "base_site.html" + content_template = None + + _user_menu = [] + _admin_menu = [] + _groups = [] + + + class Configuration: + stylesheets = ['base.css'] + page_blocks = ['header', 'header_small', 'title'] + + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.user = None + self._page_blocks = [] + if not hasattr(self, "PageInfo"): + raise ImproperlyConfigured("You must define a PageInfo on ", self) + for attr, val in self.PageInfo.__dict__.items(): + if attr[0] is not "_" and type(val) is str: + setattr(self, attr, Template(val)) + self._page_blocks.append(attr) + + def get_template_names(self): + """ Ensure same template for all children views. """ + return [self.base_template] + + def get_content_template(self): + # Ensure easy integration with generic views + if hasattr(self, 'template_name'): + self.content_template = self.template_name + else: + raise ImproperlyConfigured(self, "has no template defined !") + return self.content_template + + def _update_context_with_rendered_blocks(self, context): """ Render text for existing PageInfo attributes. See Configuration.page_blocks for valid attribute names """ @@ -205,9 +213,4 @@ class WebsiteAjaxTemplateMixin(WebsiteTemplateMixin): return [self.ajax_template] return super().get_template_names() -class WebsiteProtectedMixin(WebsiteTemplateMixin, PermissionRequiredMixin): - pass - -class WebsiteProtectedWithAjaxMixin(WebsiteAjaxTemplateMixin, PermissionRequiredMixin): - pass diff --git a/website/views.py b/website/views.py index e335353..fa085a1 100644 --- a/website/views.py +++ b/website/views.py @@ -40,11 +40,9 @@ def login_view(request): user = authenticate(username=username, password=password) if user is not None: login(request, user) - next = request.POST.get('next', None) if not next: next = _get_entry_point(user) return HttpResponseRedirect(next) - else: return HttpResponseRedirect('/')