web/lib/django/contrib/auth/views.py
author ymh <ymh.work@gmail.com>
Tue, 15 Mar 2011 10:34:41 +0100
changeset 65 3d18d15135f1
parent 38 77b6da96e6f1
permissions -rw-r--r--
put video url in segment object
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
38
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
import re
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
from django.conf import settings
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
from django.contrib.auth import REDIRECT_FIELD_NAME
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
# Avoid shadowing the login() view below.
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
from django.contrib.auth import login as auth_login
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
from django.contrib.auth.decorators import login_required
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
from django.contrib.auth.forms import AuthenticationForm
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
from django.contrib.auth.forms import PasswordResetForm, SetPasswordForm, PasswordChangeForm
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
from django.contrib.auth.tokens import default_token_generator
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
from django.views.decorators.csrf import csrf_protect
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
from django.core.urlresolvers import reverse
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
from django.shortcuts import render_to_response, get_object_or_404
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
from django.contrib.sites.models import Site, RequestSite
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
from django.http import HttpResponseRedirect, Http404
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
from django.template import RequestContext
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
from django.utils.http import urlquote, base36_to_int
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
from django.utils.translation import ugettext as _
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
from django.contrib.auth.models import User
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
from django.views.decorators.cache import never_cache
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
@csrf_protect
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
@never_cache
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
def login(request, template_name='registration/login.html',
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
          redirect_field_name=REDIRECT_FIELD_NAME,
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
          authentication_form=AuthenticationForm):
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
    """Displays the login form and handles the login action."""
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
    redirect_to = request.REQUEST.get(redirect_field_name, '')
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
    
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
    if request.method == "POST":
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
        form = authentication_form(data=request.POST)
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
        if form.is_valid():
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
            # Light security check -- make sure redirect_to isn't garbage.
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
            if not redirect_to or ' ' in redirect_to:
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
                redirect_to = settings.LOGIN_REDIRECT_URL
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
            
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
            # Heavier security check -- redirects to http://example.com should 
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
            # not be allowed, but things like /view/?param=http://example.com 
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
            # should be allowed. This regex checks if there is a '//' *before* a
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
            # question mark.
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
            elif '//' in redirect_to and re.match(r'[^\?]*//', redirect_to):
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
                    redirect_to = settings.LOGIN_REDIRECT_URL
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
            
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
            # Okay, security checks complete. Log the user in.
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
            auth_login(request, form.get_user())
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
            if request.session.test_cookie_worked():
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
                request.session.delete_test_cookie()
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
            return HttpResponseRedirect(redirect_to)
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
    else:
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
        form = authentication_form(request)
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
    
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
    request.session.set_test_cookie()
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
    
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
    if Site._meta.installed:
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
        current_site = Site.objects.get_current()
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
    else:
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
        current_site = RequestSite(request)
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
    
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
    return render_to_response(template_name, {
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
        'form': form,
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
        redirect_field_name: redirect_to,
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
        'site': current_site,
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
        'site_name': current_site.name,
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
    }, context_instance=RequestContext(request))
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
def logout(request, next_page=None, template_name='registration/logged_out.html', redirect_field_name=REDIRECT_FIELD_NAME):
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
    "Logs out the user and displays 'You are logged out' message."
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
    from django.contrib.auth import logout
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
    logout(request)
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
    if next_page is None:
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
        redirect_to = request.REQUEST.get(redirect_field_name, '')
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
        if redirect_to:
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
            return HttpResponseRedirect(redirect_to)
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
        else:
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
            return render_to_response(template_name, {
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
                'title': _('Logged out')
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
            }, context_instance=RequestContext(request))
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
    else:
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
        # Redirect to this page until the session has been cleared.
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
        return HttpResponseRedirect(next_page or request.path)
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
def logout_then_login(request, login_url=None):
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
    "Logs out the user if he is logged in. Then redirects to the log-in page."
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
    if not login_url:
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
        login_url = settings.LOGIN_URL
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
    return logout(request, login_url)
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
def redirect_to_login(next, login_url=None, redirect_field_name=REDIRECT_FIELD_NAME):
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
    "Redirects the user to the login page, passing the given 'next' page"
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
    if not login_url:
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
        login_url = settings.LOGIN_URL
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
    return HttpResponseRedirect('%s?%s=%s' % (login_url, urlquote(redirect_field_name), urlquote(next)))
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
# 4 views for password reset:
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
# - password_reset sends the mail
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
# - password_reset_done shows a success message for the above
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
# - password_reset_confirm checks the link the user clicked and 
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
#   prompts for a new password
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
# - password_reset_complete shows a success message for the above
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
@csrf_protect
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
def password_reset(request, is_admin_site=False, template_name='registration/password_reset_form.html',
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
        email_template_name='registration/password_reset_email.html',
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
        password_reset_form=PasswordResetForm, token_generator=default_token_generator,
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
        post_reset_redirect=None):
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
    if post_reset_redirect is None:
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
        post_reset_redirect = reverse('django.contrib.auth.views.password_reset_done')
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
    if request.method == "POST":
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
        form = password_reset_form(request.POST)
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
        if form.is_valid():
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
            opts = {}
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
            opts['use_https'] = request.is_secure()
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
            opts['token_generator'] = token_generator
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
            if is_admin_site:
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   118
                opts['domain_override'] = request.META['HTTP_HOST']
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
            else:
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
                opts['email_template_name'] = email_template_name
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
                if not Site._meta.installed:
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
                    opts['domain_override'] = RequestSite(request).domain
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
            form.save(**opts)
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
            return HttpResponseRedirect(post_reset_redirect)
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
    else:
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
        form = password_reset_form()
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
    return render_to_response(template_name, {
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
        'form': form,
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
    }, context_instance=RequestContext(request))
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
def password_reset_done(request, template_name='registration/password_reset_done.html'):
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
    return render_to_response(template_name, context_instance=RequestContext(request))
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   134
# Doesn't need csrf_protect since no-one can guess the URL
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   135
def password_reset_confirm(request, uidb36=None, token=None, template_name='registration/password_reset_confirm.html',
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   136
                           token_generator=default_token_generator, set_password_form=SetPasswordForm,
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   137
                           post_reset_redirect=None):
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   138
    """
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   139
    View that checks the hash in a password reset link and presents a
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   140
    form for entering a new password.
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   141
    """
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   142
    assert uidb36 is not None and token is not None # checked by URLconf
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   143
    if post_reset_redirect is None:
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   144
        post_reset_redirect = reverse('django.contrib.auth.views.password_reset_complete')
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   145
    try:
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   146
        uid_int = base36_to_int(uidb36)
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   147
    except ValueError:
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   148
        raise Http404
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   149
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   150
    user = get_object_or_404(User, id=uid_int)
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   151
    context_instance = RequestContext(request)
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   152
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   153
    if token_generator.check_token(user, token):
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   154
        context_instance['validlink'] = True
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   155
        if request.method == 'POST':
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   156
            form = set_password_form(user, request.POST)
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   157
            if form.is_valid():
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   158
                form.save()
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   159
                return HttpResponseRedirect(post_reset_redirect)
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   160
        else:
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   161
            form = set_password_form(None)
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   162
    else:
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   163
        context_instance['validlink'] = False
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   164
        form = None
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   165
    context_instance['form'] = form
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   166
    return render_to_response(template_name, context_instance=context_instance)
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   167
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   168
def password_reset_complete(request, template_name='registration/password_reset_complete.html'):
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   169
    return render_to_response(template_name, context_instance=RequestContext(request,
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   170
                                                                             {'login_url': settings.LOGIN_URL}))
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   171
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   172
@csrf_protect
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   173
@login_required
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   174
def password_change(request, template_name='registration/password_change_form.html',
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   175
                    post_change_redirect=None, password_change_form=PasswordChangeForm):
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   176
    if post_change_redirect is None:
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   177
        post_change_redirect = reverse('django.contrib.auth.views.password_change_done')
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   178
    if request.method == "POST":
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   179
        form = password_change_form(user=request.user, data=request.POST)
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   180
        if form.is_valid():
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   181
            form.save()
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   182
            return HttpResponseRedirect(post_change_redirect)
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   183
    else:
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   184
        form = password_change_form(user=request.user)
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   185
    return render_to_response(template_name, {
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   186
        'form': form,
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   187
    }, context_instance=RequestContext(request))
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   188
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   189
def password_change_done(request, template_name='registration/password_change_done.html'):
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   190
    return render_to_response(template_name, context_instance=RequestContext(request))