当前位置: 首页>>编程示例 >>用法及示例精选 >>正文


Python Django LoginView.get_default_redirect_url用法及代码示例

本文介绍django.contrib.auth.views.LoginView.get_default_redirect_url的用法。

声明

get_default_redirect_url()
Django 4.0 中的新函数。

返回登录后重定向到的 URL。默认实现解析并返回 next_page (如果设置),否则返回 LOGIN_REDIRECT_URL

以下是LoginView 的作用:

  • 如果通过 GET 调用,它会显示一个登录表单,该表单会发布到相同的 URL。稍后再详细介绍。
  • 如果使用用户提交的凭据通过 POST 调用,它会尝试让用户登录。如果登录成功,视图将重定向到 next 中指定的 URL。如果未提供 next,它将重定向到 settings.LOGIN_REDIRECT_URL (默认为 /accounts/profile/ )。如果登录不成功,它会重新显示登录表单。

您有责任为登录模板提供 html,默认情况下称为 registration/login.html。这个模板被传递了四个模板上下文变量:

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

如果您不想调用模板 registration/login.html ,可以通过额外参数将 template_name 参数传递给 URLconf 中的 as_view 方法。例如,此 URLconf 行将使用 myapp/login.html 代替:

path('accounts/login/', auth_views.LoginView.as_view(template_name='myapp/login.html')),

您还可以指定 GET 字段的名称,其中包含使用 redirect_field_name 登录后要重定向到的 URL。默认情况下,该字段称为 next

这是一个示例 registration/login.html 模板,您可以将其用作起点。它假定您有一个定义 content 块的 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 set up the password_reset view in your URLconf #}
<p><a href="{% url 'password_reset' %}">Lost password?</a></p>

{% endblock %}

如果您已自定义身份验证(请参阅自定义身份验证),您可以通过设置 authentication_form 属性来使用自定义身份验证表单。此表单必须在其__init__() 方法中接受request 关键字参数,并提供返回经过身份验证的用户对象的get_user() 方法(此方法仅在表单验证成功后才会调用)。

相关用法


注:本文由纯净天空筛选整理自djangoproject.com大神的英文原创作品 django.contrib.auth.views.LoginView.get_default_redirect_url。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。