#101 #103 added change password, logout views

This commit is contained in:
d1ffuz0r 2013-05-22 17:10:22 +07:00
parent 9acdf9e2f8
commit 8ae0644fb9
8 changed files with 119 additions and 8 deletions

View file

@ -4,6 +4,7 @@ WARNING: This file about to undergo major refactoring by @pydanny per Issue #99.
from django.conf.urls import patterns, include, url
from django.conf import settings
from django.contrib.auth.decorators import login_required
from django.core.exceptions import ImproperlyConfigured
from django.utils.importlib import import_module
@ -135,7 +136,21 @@ class Admin2(object):
view=self.api_index_view.as_view(**self.get_api_index_kwargs()),
name='api-index'
),
url(regex=r'^password_change/$',
regex=rlogin_required(views.PasswordChangeView.as_view()),
name='password-change'
),
url(regex=r'^password_change_done/$',
login_required(views.PasswordChangeDoneView.as_view()),
name='password-change-done'
),
url(regex=r'^logout/$',
login_required(views.LogoutView.as_view()),
name='logout'
),
)
for model, model_admin in self.registry.iteritems():
model_options = utils.model_options(model)
urlpatterns += patterns('',

View file

@ -0,0 +1,13 @@
{% extends "admin2/bootstrap/base.html" %}
{% load i18n %}
{% load admin2_tags %}
{% block content %}
<div class="row">
<div class="span12">
<p>{% trans "Thanks for spending some quality time with the Web site today." %}</p>
<p><p><a href="{% url 'admin2:dashboard' %}">{% trans 'Log in again' %}</a></p></p>
</div>
</div>
{% endblock content %}

View file

@ -0,0 +1,15 @@
{% extends "admin2/bootstrap/base.html" %}
{% load i18n %}
{% load admin2_tags %}
{% block title %}{% trans 'Password change successful' %}{% endblock %}
{% block page_title %}{% trans 'Password change successful' %}{% endblock %}
{% block content %}
<div class="row">
<div class="span12">
<p>{% trans 'Your password was changed.' %}</p>
</div>
</div>
{% endblock content %}

View file

@ -0,0 +1,27 @@
{% extends "admin2/bootstrap/base.html" %}
{% load i18n %}
{% load admin2_tags %}
{% block page_title %}{% trans "Password change" %}{% endblock %}
{% block content %}
<div class="row">
<div class="span12">
<p>Please enter your old password, for security's sake, and then enter your new password twice so we can verify you typed it in correctly.</p>
{% if form.errors %}
<p class="error-note">
{% blocktrans count counter=form.errors.items|length %}Please correct the error below.{% plural %}Please correct the errors below.{% endblocktrans %}
</p>
{% endif %}
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button class="btn btn-small btn-success" type="submit" name="_save">{% trans "Change my password" %}</button>
</form>
</div>
</div>
{% endblock content %}

View file

@ -13,16 +13,16 @@
<div class="navbar navbar-inverse navbar-static-top">
<div class="navbar-inner">
<div class="container-fluid">
<a class="brand" href="{% url 'admin2:dashboard' %}">Django-Admin2</a>
<a tabindex="1" class="brand" href="{% url 'admin2:dashboard' %}">Django-Admin2</a>
<ul class="nav pull-right">
<li><a tabindex="-1" href="{% url 'admin2:api-index' %}">{% trans "API" %}</a></li>
<li><a tabindex="2" href="{% url 'admin2:api-index' %}">{% trans "API" %}</a></li>
{% if docsroot %}
<li><a href="{{ docsroot }}">{% trans 'Documentation' %}</a></li>
<li><a tabindex="3" href="{{ docsroot }}">{% trans 'Documentation' %}</a></li>
{% endif %}
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
<a tabindex="4" href="#" class="dropdown-toggle" data-toggle="dropdown">
{% if user.get_full_name %}
{{ user.get_full_name }}
{% else %}
@ -34,9 +34,11 @@
</a>
<ul class="dropdown-menu">
{% if user.has_usable_password %}
<li><a tabindex="-1" href="TODO">{% trans "Change password" %}</a></li>
<li><a href="{% url 'admin2:password-change' %}">{% trans "Change password" %}</a></li>
{% endif %}
{% if user.is_authenticated %}
<li><a href="{% url 'admin2:logout' %}">{% trans "Log out" %}</a></li>
{% endif %}
<li><a tabindex="-1" href="TODO">{% trans "Log out" %}</a></li>
</ul>
</li>
</ul>

View file

@ -32,4 +32,4 @@ class Admin2Test(TestCase):
def test_get_urls(self):
self.admin2.register(Thing)
self.assertEquals(5, len(self.admin2.get_urls()))
self.assertEquals(7, len(self.admin2.get_urls()))

View file

@ -1,4 +1,8 @@
from django.core.urlresolvers import reverse
from django.contrib.auth.forms import PasswordChangeForm
from django.contrib.auth.views import logout
from django.contrib.auth import get_user_model
from django.core.urlresolvers import reverse, reverse_lazy
from django.http import HttpResponseRedirect
from django.utils.encoding import force_text
from django.utils.text import capfirst
@ -128,3 +132,38 @@ class ModelDeleteView(AdminModel2Mixin, generic.DeleteView):
'deletable_objects': collector.nested(_format_callback)
})
return context
class PasswordChangeView(Admin2Mixin, generic.UpdateView):
default_template_name = 'auth/password_change_form.html'
form_class = PasswordChangeForm
model = get_user_model()
success_url = reverse_lazy('admin2:password-change-done')
def get_form_kwargs(self, **kwargs):
data = {'user': self.get_object()}
if self.request.method in ('POST', 'PUT'):
data.update({
'data': self.request.POST
})
return data
def get_object(self, **kwargs):
return self.request.user
class PasswordChangeDoneView(Admin2Mixin, generic.TemplateView):
default_template_name = 'auth/password_change_done.html'
class LogoutView(Admin2Mixin, generic.TemplateView):
default_template_name = 'auth/logout.html'
def get(self, request, *args, **kwargs):
return logout(request, template_name=self.get_template_names(),
*args, **kwargs)