[TASK] Wrap login and logout for proper templateing.

This commit is contained in:
Jan Philipp Timme 2014-07-27 23:34:23 +02:00
parent b233e3ea90
commit 134d7288a0
7 changed files with 92 additions and 29 deletions

View File

@ -24,6 +24,14 @@ DEBUG = True
TEMPLATE_DEBUG = True TEMPLATE_DEBUG = True
TEMPLATE_DIRS = (
'frontend/templates'
)
LOGIN_URL = '/login'
LOGOUT_URL = '/logout'
LOGIN_REDIRECT_URL = '/'
ALLOWED_HOSTS = [] ALLOWED_HOSTS = []
# Application definition # Application definition

View File

@ -5,14 +5,17 @@ from django.conf.urls import patterns, include, url
from django.contrib import admin from django.contrib import admin
admin.autodiscover() admin.autodiscover()
from frontend.views import IndexView, RegisterView, LoginView from frontend.views import login_wrap, logout_wrap
from frontend.views import IndexView, RegisterView
urlpatterns = patterns('', urlpatterns = patterns('',
# Examples: # Examples:
# url(r'^$', 'citavi_mapper.views.home', name='home'), # url(r'^$', 'citavi_mapper.views.home', name='home'),
# url(r'^blog/', include('blog.urls')), # url(r'^blog/', include('blog.urls')),
url(r'^$', IndexView.as_view(), name='frontend-index'), url(r'^$', IndexView.as_view(), name='frontend-index'),
url(r'^login/$', login_wrap, name='frontend-login'),
url(r'^logout/$', logout_wrap, name='frontend-logout'),
url(r'^register/', RegisterView.as_view(), name='frontend-register'), url(r'^register/', RegisterView.as_view(), name='frontend-register'),
url(r'^login/', LoginView.as_view(), name='frontend-login'),
url(r'^admin/', include(admin.site.urls)), url(r'^admin/', include(admin.site.urls)),
) )

View File

@ -6,7 +6,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="Merging Citavi projects and mapping existing datasets."> <meta name="description" content="Merging Citavi projects and mapping existing datasets.">
<title>{% block title %}{{page_name}} :: {{page_title}}{% endblock %}</title> <title>{% block title %}{{page.name}} :: {{page.title}}{% endblock %}</title>
<!-- Bootstrap --> <!-- Bootstrap -->
{% compressed_css 'bootstrap' %} {% compressed_css 'bootstrap' %}
{% compressed_js 'bootstrap' %} {% compressed_js 'bootstrap' %}
@ -16,18 +16,24 @@
<nav class="navbar navbar-default navbar-fixed-top" role="navigation"> <nav class="navbar navbar-default navbar-fixed-top" role="navigation">
<div class="container"> <div class="container">
<div class="navbar-header"> <div class="navbar-header">
<a class="navbar-brand" href="/">{{page_name}}</a> <a class="navbar-brand" href="/">{{page.name}}</a>
<ul class="nav navbar-nav"> <ul class="nav navbar-nav">
<li><a href="/">Index</a></li> <li><a href="/">Index</a></li>
<li><a href="/register">Register</a></li> <li><a href="/register">Register</a></li>
<li><a href="/login">Login</a></li> <li>
{% if user.is_anonymous %}
<a href="/login">Login</a>
{% else %}
<a href="/logout">Logout</a>
{% endif %}
</li>
</ul> </ul>
</div> </div>
</div> </div>
</nav> </nav>
<div class="page-header"> <div class="page-header">
<div id="header" class="container"> <div id="header" class="container">
<h1>{{page_title}}</h1> <h1>{{page.title}}</h1>
</div> </div>
</div> </div>
<div id="content" class="container"> <div id="content" class="container">

View File

@ -1,6 +1,6 @@
{% extends "layout/base.html" %} {% extends "layout/base.html" %}
{% block content %} {% block content %}
<p> <p>
REGISTER FORM HERE Please register here.
</p> </p>
{% endblock %} {% endblock %}

View File

@ -1,6 +1,6 @@
{% extends "layout/base.html" %} {% extends "layout/base.html" %}
{% block content %} {% block content %}
<p> <p>
LOGIN FORM HERE You are logged out. Goodbye!
</p> </p>
{% endblock %} {% endblock %}

View File

@ -0,0 +1,15 @@
{% extends "layout/base.html" %}
{% block content %}
{% if form.errors %}
<p>Your username and password did not match. Please try again.</p>
{% endif %}
<p>
<form method="POST" action="{% url 'frontend-login' %}">
{% csrf_token %}
{{form.username.label_tag}} {{form.username}}<br>
{{form.password.label_tag}} {{form.password}}
<input type="submit" value="login" />
<input type="hidden" name="next" value="{{next}}" />
</form>
</p>
{% endblock %}

View File

@ -1,30 +1,61 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from django.contrib.auth.decorators import login_required
from django.utils.decorators import method_decorator
from django.views.generic import TemplateView from django.views.generic import TemplateView
from django.contrib.auth.views import login, logout
class BaseSiteView(TemplateView): FRONTEND_PAGE_NAME = 'Citavi Mapper'
template_name = "base.html"
page_name = "Citavi Mapper"
page_title = "BASE"
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)
class BaseView(TemplateView):
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(self, request, **kwargs): def get(self, request, **kwargs):
self._request = request return super(BaseView, self).get(request, **kwargs)
return super(BaseSiteView, self).get(request, **kwargs)
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super(BaseSiteView, self).get_context_data(**kwargs) kwargs[u'page'] = self.get_page_data()
context['page_name'] = self.page_name return super(BaseView, self).get_context_data(**kwargs)
context['page_title'] = self.page_title
return context
class IndexView(BaseSiteView): class LoggedInMixin(object):
template_name = "index.html" @method_decorator(login_required)
page_title = "Index" def dispatch(self, *args, **kwargs):
return super(LoggedInMixin, self).dispatch(*args, **kwargs)
class RegisterView(BaseSiteView): class ProtectedSiteView(LoggedInMixin, BaseView):
template_name = "register.html" pass
page_title = "Register"
class LoginView(BaseSiteView): class IndexView(ProtectedSiteView):
template_name = "login.html" template_name = 'index.html'
page_title = "Login" page_title = 'Index'
class RegisterView(BaseView):
template_name = 'register.html'
page_title = 'Register'