Django

Code

Changeset 8283

Show
Ignore:
Timestamp:
08/10/08 04:43:48 (1 year ago)
Author:
brosner
Message:

Fixed #8202 -- Moved user_change_password to UserAdmin?. This enables seamless integration of a custom UserAdmin?. Thanks ElliottM for catching this.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • django/trunk/django/contrib/admin/sites.py

    r8275 r8283  
    1919LOGIN_FORM_KEY = 'this_is_the_login_form' 
    2020 
    21 USER_CHANGE_PASSWORD_URL_RE = re.compile('auth/user/(\d+)/password') 
    22  
    2321class AlreadyRegistered(Exception): 
    2422    pass 
     
    171169            return shortcut(request, *url.split('/')[1:]) 
    172170        else: 
    173             match = USER_CHANGE_PASSWORD_URL_RE.match(url) 
    174             if match: 
    175                 return self.user_change_password(request, match.group(1)) 
    176  
    177171            if '/' in url: 
    178172                return self.model_page(request, *url.split('/', 2)) 
     
    209203        from django.contrib.auth.views import password_change_done 
    210204        return password_change_done(request) 
    211  
    212     def user_change_password(self, request, id): 
    213         """ 
    214         Handles the "user change password" task 
    215         """ 
    216         from django.contrib.auth.views import user_change_password 
    217         return user_change_password(request, id) 
    218205 
    219206    def i18n_javascript(self, request): 
  • django/trunk/django/contrib/auth/admin.py

    r8280 r8283  
     1 
    12from django.contrib.auth.models import User, Group 
    23from django.core.exceptions import PermissionDenied 
    34from django import template 
    4 from django.shortcuts import render_to_response 
     5from django.shortcuts import render_to_response, get_object_or_404 
     6from django.template import RequestContext 
     7from django.utils.html import escape 
    58from django.http import HttpResponseRedirect 
    69from django.utils.translation import ugettext, ugettext_lazy as _ 
    7 from django.contrib.auth.forms import UserCreationForm 
     10from django.contrib.auth.forms import UserCreationForm, AdminPasswordChangeForm 
    811from django.contrib import admin 
    912 
     
    2225    ) 
    2326    add_form = UserCreationForm 
     27    change_password_form = AdminPasswordChangeForm 
    2428    list_display = ('username', 'email', 'first_name', 'last_name', 'is_staff') 
    2529    list_filter = ('is_staff', 'is_superuser') 
     
    2731    ordering = ('username',) 
    2832    filter_horizontal = ('user_permissions',) 
    29  
     33     
     34    def __call__(self, request, url): 
     35        # this should not be here, but must be due to the way __call__ routes 
     36        # in ModelAdmin. 
     37        if url is None: 
     38            return self.changelist_view(request) 
     39        if url.endswith('password'): 
     40            return self.user_change_password(request, url.split('/')[0]) 
     41        return super(UserAdmin, self).__call__(request, url) 
     42     
    3043    def add_view(self, request): 
    3144        if not self.has_change_permission(request): 
     
    6174            'root_path': self.admin_site.root_path, 
    6275        }, context_instance=template.RequestContext(request)) 
     76     
     77    def user_change_password(self, request, id): 
     78        if not request.user.has_perm('auth.change_user'): 
     79            raise PermissionDenied 
     80        user = get_object_or_404(self.model, pk=id) 
     81        if request.method == 'POST': 
     82            form = self.change_password_form(user, request.POST) 
     83            if form.is_valid(): 
     84                new_user = form.save() 
     85                msg = ugettext('Password changed successfully.') 
     86                request.user.message_set.create(message=msg) 
     87                return HttpResponseRedirect('..') 
     88        else: 
     89            form = self.change_password_form(user) 
     90        return render_to_response('admin/auth/user/change_password.html', { 
     91            'title': _('Change password: %s') % escape(user.username), 
     92            'form': form, 
     93            'is_popup': '_popup' in request.REQUEST, 
     94            'add': True, 
     95            'change': False, 
     96            'has_delete_permission': False, 
     97            'has_change_permission': True, 
     98            'has_absolute_url': False, 
     99            'opts': self.model._meta, 
     100            'original': user, 
     101            'save_as': False, 
     102            'show_save': True, 
     103            'root_path': self.admin_site.root_path, 
     104        }, context_instance=RequestContext(request)) 
     105 
    63106 
    64107admin.site.register(Group, GroupAdmin) 
  • django/trunk/django/contrib/auth/views.py

    r8171 r8283  
    150150def password_change_done(request, template_name='registration/password_change_done.html'): 
    151151    return render_to_response(template_name, context_instance=RequestContext(request)) 
    152  
    153 # TODO: move to admin.py in the ModelAdmin 
    154 def user_change_password(request, id): 
    155     if not request.user.has_perm('auth.change_user'): 
    156         raise PermissionDenied 
    157     user = get_object_or_404(User, pk=id) 
    158     if request.method == 'POST': 
    159         form = AdminPasswordChangeForm(user, request.POST) 
    160         if form.is_valid(): 
    161             new_user = form.save() 
    162             msg = _('Password changed successfully.') 
    163             request.user.message_set.create(message=msg) 
    164             return HttpResponseRedirect('..') 
    165     else: 
    166         form = AdminPasswordChangeForm(user) 
    167     return render_to_response('admin/auth/user/change_password.html', { 
    168         'title': _('Change password: %s') % escape(user.username), 
    169         'form': form, 
    170         'is_popup': '_popup' in request.REQUEST, 
    171         'add': True, 
    172         'change': False, 
    173         'has_delete_permission': False, 
    174         'has_change_permission': True, 
    175         'has_absolute_url': False, 
    176         'opts': User._meta, 
    177         'original': user, 
    178         'save_as': False, 
    179         'show_save': True, 
    180         'root_path': re.sub('auth/user/(\d+)/password/$', '', request.path), 
    181     }, context_instance=RequestContext(request))