mirror of
https://github.com/jazzband/django-admin2.git
synced 2026-03-16 22:20:24 +00:00
parent
9acdf9e2f8
commit
8ae0644fb9
8 changed files with 119 additions and 8 deletions
|
|
@ -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('',
|
||||
|
|
|
|||
0
djadmin2/templates/admin2/bootstrap/auth/login.html
Normal file
0
djadmin2/templates/admin2/bootstrap/auth/login.html
Normal file
13
djadmin2/templates/admin2/bootstrap/auth/logout.html
Normal file
13
djadmin2/templates/admin2/bootstrap/auth/logout.html
Normal 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 %}
|
||||
|
|
@ -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 %}
|
||||
|
|
@ -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 %}
|
||||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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()))
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Reference in a new issue