login(request, template_name=`registration/login.html`, redirect_field_name='next', authentication_form=AuthenticationForm, current_app=None, extra_context=None, redirect_authenticated_user=False)
URL name: login
See the URL documentation for details on using named URL patterns.
Optional arguments:
-
template_name: The name of a template to display for the view used to log the user in. Defaults toregistration/login.html. -
redirect_field_name: The name of aGETfield containing the URL to redirect to after login. Defaults tonext. -
authentication_form: A callable (typically just a form class) to use for authentication. Defaults toAuthenticationForm. -
current_app: A hint indicating which application contains the current view. See the namespaced URL resolution strategy for more information. -
extra_context: A dictionary of context data that will be added to the default context data passed to the template. -
redirect_authenticated_user: A boolean that controls whether or not authenticated users accessing the login page will be redirected as if they had just successfully logged in. Defaults toFalse.
Deprecated since version 1.9: The current_app parameter is deprecated and will be removed in Django 2.0. Callers should set request.current_app instead.
The redirect_authenticated_user parameter was added.
Here’s what django.contrib.auth.views.login does:
- If called via
GET, it displays a login form that POSTs to the same URL. More on this in a bit. - If called via
POSTwith user submitted credentials, it tries to log the user in. If login is successful, the view redirects to the URL specified innext. Ifnextisn’t provided, it redirects tosettings.LOGIN_REDIRECT_URL(which defaults to/accounts/profile/). If login isn’t successful, it redisplays the login form.
It’s your responsibility to provide the html for the login template , called registration/login.html by default. This template gets passed four template context variables:
-
form: AFormobject representing theAuthenticationForm. -
next: The URL to redirect to after successful login. This may contain a query string, too. -
site: The currentSite, according to theSITE_IDsetting. If you don’t have the site framework installed, this will be set to an instance ofRequestSite, which derives the site name and domain from the currentHttpRequest. -
site_name: An alias forsite.name. If you don’t have the site framework installed, this will be set to the value ofrequest.META['SERVER_NAME']. For more on sites, see The “sites” framework.
If you’d prefer not to call the template registration/login.html, you can pass the template_name parameter via the extra arguments to the view in your URLconf. For example, this URLconf line would use myapp/login.html instead:
url(r'^accounts/login/$', auth_views.login, {'template_name': 'myapp/login.html'}),
You can also specify the name of the GET field which contains the URL to redirect to after login by passing redirect_field_name to the view. By default, the field is called next.
Here’s a sample registration/login.html template you can use as a starting point. It assumes you have a base.html template that defines a content block:
{% extends "base.html" %}
{% block content %}
{% if form.errors %}
<p>Your username and password didn't match. Please try again.</p>
{% endif %}
{% if next %}
{% if user.is_authenticated %}
<p>Your account doesn't have access to this page. To proceed,
please login with an account that has access.</p>
{% else %}
<p>Please login to see this page.</p>
{% endif %}
{% endif %}
<form method="post" action="{% url 'login' %}">
{% csrf_token %}
<table>
<tr>
<td>{{ form.username.label_tag }}</td>
<td>{{ form.username }}</td>
</tr>
<tr>
<td>{{ form.password.label_tag }}</td>
<td>{{ form.password }}</td>
</tr>
</table>
<input type="submit" value="login" />
<input type="hidden" name="next" value="{{ next }}" />
</form>
{# Assumes you setup the password_reset view in your URLconf #}
<p><a href="{% url 'password_reset' %}">Lost password?</a></p>
{% endblock %}
If you have customized authentication (see Customizing Authentication) you can pass a custom authentication form to the login view via the authentication_form parameter. This form must accept a request keyword argument in its __init__ method, and provide a get_user() method which returns the authenticated user object (this method is only ever called after successful form validation).
Please login to continue.