基于 Django1.10 文档的深入学习(20)—— Using the Django authentication system 之 login()

来源:互联网 发布:最小的windows 编辑:程序博客网 时间:2024/06/09 14:33

所有验证视图

这是一个包含django.contrib.auth提供的所有视图的列表。 有关实现细节,请参阅使用视图。

login(        request,         template_name=`registration/login.html`, redirect_field_name='next',         current_app=None,         extra_context=None,         redirect_authenticated_user=False)

可选参数:

template_name:用于为用户登录的视图显示的模板的名称。默认为registration / login.html

redirect_field_nameGET字段的名称,包含登录后要重定向到的URL。 默认为下一个。

authentication_form:用于认证的可调用(通常只是一个表单类)。 默认为AuthenticationForm

current_app:指示哪个应用程序包含当前视图的提示。 有关详细信息,请参阅命名空间的URL解析策略。

extra_context:将添加到传递给模板的默认上下文数据的上下文数据字典。

redirect_authenticated_user:一个布尔值,用于控制访问登录页面的验证用户是否将被重定向,就像他们刚刚成功登录一样,默认为False

警告

如果启用redirect_authenticated_user,其他网站将能够通过请求重定向到网站上的图像文件来确定访问者是否在您的网站上进行身份验证。为了避免这种“社交媒体指纹”信息泄露,请将所有图像和您的图标托管在单独的域上。

这是django.contrib.auth.views.login的作用:

  • 如果通过GET调用,它将显示一个POSTs到相同的URL的登录表单。更多关于这一点。
  • 如果通过POST通过用户提交的凭据进行调用,则会尝试登录用户。如果登录成功,则视图重定向到下一个指定的URL。如果未提供下一个,则重定向到settings.LOGIN_REDIRECT_URL(默认为/accounts / profile /)。如果登录不成功,则重新显示登录表单。

默认情况下,您有责任为登录模板提供html,名为registration / login.html。该模板通过四个模板上下文变量:

  • form:表示AuthenticationForm的Form对象。
  • next:成功登录后重定向到的URL。这也可能包含查询字符串。
  • 站点:当前站点,根据SITE_ID设置。如果您没有安装网站框架,那么这将被设置为一个RequestSite实例,它从当前的HttpRequest中导出站点名称和域。
  • site_name:site.name的别名。如果您没有安装网站框架,这将被设置为request.META['SERVER_NAME']的值。有关网站的更多信息,请参阅“网站”框架。

如果您不想调用template / login.html,可以通过额外的参数将template_name参数传递给URLconf中的视图。例如,此URLconf行将使用myapp / login.html

url(r'^accounts/login/$', auth_views.login, {'template_name': 'myapp/login.html'}),

您还可以通过将redirect_field_name传递给视图,在登录后指定包含要重定向到的URL的GET字段的名称。 默认情况下,该字段称为下一个。

以下是一个可用作起点的注册/ login.html模板示例。 它假定您有一个定义内容块的base.html模板:

{% 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 %}

如果您有自定义身份验证(请参阅自定义身份验证),您可以通过authentication_form参数将自定义身份验证表单传递到登录视图。 此表单必须在其__init__方法中接受请求关键字参数,并提供一个返回经过身份验证的用户对象的get_user()方法(此方法仅在成功的表单验证后才会被调用)。

1 0
原创粉丝点击