# -*- coding: utf-8 -*- from django.views.generic import TemplateView, FormView, CreateView, UpdateView from django.contrib.auth.decorators import login_required from django.utils.decorators import method_decorator from django.contrib.auth.views import login, logout from frontend.forms import NewProjectForm FRONTEND_PAGE_NAME = 'Citavi Mapper' # Login wrapper functions def login_wrap(*args, **kwargs): kwargs['extra_context'] = { 'page': { 'name': FRONTEND_PAGE_NAME, 'title': 'Login' } } return login(*args, **kwargs) def logout_wrap(*args, **kwargs): kwargs['extra_context'] = { 'page': { 'name': FRONTEND_PAGE_NAME, 'title': 'Logout' } } return logout(*args, **kwargs) # My base classes for views class MyViewMixin(object): template_name = 'base.html' page_name = FRONTEND_PAGE_NAME page_title = 'BASE' def get_page_data(self): return { u'name': self.page_name, u'title': self.page_title } def get_context_data(self, **kwargs): kwargs[u'page'] = self.get_page_data() return super(MyViewMixin, self).get_context_data(**kwargs) class MyTemplateView(MyViewMixin, TemplateView): pass class MyFormView(MyViewMixin, FormView): pass class MyCreateView(MyViewMixin, CreateView): pass class MyUpdateView(MyViewMixin, UpdateView): pass # Mixin to protect pages class LoggedInMixin(object): @method_decorator(login_required) def dispatch(self, *args, **kwargs): return super(LoggedInMixin, self).dispatch(*args, **kwargs) # My protected view classes class ProtectedTemplateView(LoggedInMixin, MyTemplateView): pass class ProtectedFormView(LoggedInMixin, MyFormView): pass class ProtectedCreateView(LoggedInMixin, MyCreateView): pass class ProtectedUpdateView(LoggedInMixin, MyUpdateView): pass # Actual Views class IndexView(ProtectedTemplateView): template_name = 'index.html' page_title = 'Index' class ProjectView(ProtectedFormView): template_name = 'projects.html' page_title = 'Projects' form_class = NewProjectForm success_url = '/projects' def form_valid(self, form): return super(ProjectView, self).form_valid(form)