Django

Code

root/django/trunk/django/contrib/auth/views.py

Revision 7749, 4.8 kB (checked in by adrian, 1 week ago)

Fixed #6306 -- redirect_to_login() helper function now quotes the URL arguments correctly. Thanks, SmileyChris?

  • Property svn:eol-style set to native
  • Property svn:keywords set to LastChangedRevision
Line 
1 from django import oldforms
2 from django.contrib.auth import REDIRECT_FIELD_NAME
3 from django.contrib.auth.decorators import login_required
4 from django.contrib.auth.forms import AuthenticationForm
5 from django.contrib.auth.forms import PasswordResetForm, PasswordChangeForm
6 from django.contrib.sites.models import Site, RequestSite
7 from django.http import HttpResponseRedirect
8 from django.shortcuts import render_to_response
9 from django.template import RequestContext
10 from django.utils.http import urlquote
11 from django.utils.translation import ugettext as _
12
13 def login(request, template_name='registration/login.html', redirect_field_name=REDIRECT_FIELD_NAME):
14     "Displays the login form and handles the login action."
15     manipulator = AuthenticationForm()
16     redirect_to = request.REQUEST.get(redirect_field_name, '')
17     if request.POST:
18         errors = manipulator.get_validation_errors(request.POST)
19         if not errors:
20             # Light security check -- make sure redirect_to isn't garbage.
21             if not redirect_to or '//' in redirect_to or ' ' in redirect_to:
22                 from django.conf import settings
23                 redirect_to = settings.LOGIN_REDIRECT_URL
24             from django.contrib.auth import login
25             login(request, manipulator.get_user())
26             if request.session.test_cookie_worked():
27                 request.session.delete_test_cookie()
28             return HttpResponseRedirect(redirect_to)
29     else:
30         errors = {}
31     request.session.set_test_cookie()
32
33     if Site._meta.installed:
34         current_site = Site.objects.get_current()
35     else:
36         current_site = RequestSite(request)
37
38     return render_to_response(template_name, {
39         'form': oldforms.FormWrapper(manipulator, request.POST, errors),
40         redirect_field_name: redirect_to,
41         'site_name': current_site.name,
42     }, context_instance=RequestContext(request))
43
44 def logout(request, next_page=None, template_name='registration/logged_out.html'):
45     "Logs out the user and displays 'You are logged out' message."
46     from django.contrib.auth import logout
47     logout(request)
48     if next_page is None:
49         return render_to_response(template_name, {'title': _('Logged out')}, context_instance=RequestContext(request))
50     else:
51         # Redirect to this page until the session has been cleared.
52         return HttpResponseRedirect(next_page or request.path)
53
54 def logout_then_login(request, login_url=None):
55     "Logs out the user if he is logged in. Then redirects to the log-in page."
56     if not login_url:
57         from django.conf import settings
58         login_url = settings.LOGIN_URL
59     return logout(request, login_url)
60
61 def redirect_to_login(next, login_url=None, redirect_field_name=REDIRECT_FIELD_NAME):
62     "Redirects the user to the login page, passing the given 'next' page"
63     if not login_url:
64         from django.conf import settings
65         login_url = settings.LOGIN_URL
66     return HttpResponseRedirect('%s?%s=%s' % (login_url, urlquote(redirect_field_name), urlquote(next)))
67
68 def password_reset(request, is_admin_site=False, template_name='registration/password_reset_form.html',
69         email_template_name='registration/password_reset_email.html'):
70     new_data, errors = {}, {}
71     form = PasswordResetForm()
72     if request.POST:
73         new_data = request.POST.copy()
74         errors = form.get_validation_errors(new_data)
75         if not errors:
76             if is_admin_site:
77                 form.save(domain_override=request.META['HTTP_HOST'])
78             else:
79                 if Site._meta.installed:
80                     form.save(email_template_name=email_template_name)
81                 else:
82                     form.save(domain_override=RequestSite(request).domain, email_template_name=email_template_name)
83             return HttpResponseRedirect('%sdone/' % request.path)
84     return render_to_response(template_name, {'form': oldforms.FormWrapper(form, new_data, errors)},
85         context_instance=RequestContext(request))
86
87 def password_reset_done(request, template_name='registration/password_reset_done.html'):
88     return render_to_response(template_name, context_instance=RequestContext(request))
89
90 def password_change(request, template_name='registration/password_change_form.html'):
91     new_data, errors = {}, {}
92     form = PasswordChangeForm(request.user)
93     if request.POST:
94         new_data = request.POST.copy()
95         errors = form.get_validation_errors(new_data)
96         if not errors:
97             form.save(new_data)
98             return HttpResponseRedirect('%sdone/' % request.path)
99     return render_to_response(template_name, {'form': oldforms.FormWrapper(form, new_data, errors)},
100         context_instance=RequestContext(request))
101 password_change = login_required(password_change)
102
103 def password_change_done(request, template_name='registration/password_change_done.html'):
104     return render_to_response(template_name, context_instance=RequestContext(request))
Note: See TracBrowser for help on using the browser.