Django 默认登录视图总是填充下一个字段



我使用的是默认的django身份验证系统,几乎没有自定义。登录和注销的核心功能按预期工作。问题出在我的登录表单模板中的以下代码片段上:

{% if next %}
<p>Please login to see this page.</p>
{% endif %}

这是根据官方文档中提供的示例登录视图改编的。这个想法是,如果用户尝试在不登录的情况下访问受保护的页面,他/她将被重定向到登录页面,并且next参数设置为受保护页面的 url。这工作正常。

但是,当用户单击登录 URL 并直接导航到登录 URL 时,不应显示上述错误消息。但在这种情况下,next参数被设置为来自settings.pyLOGIN_REDIRECT_URL,并且我们看到此错误消息。

我尝试调试以找到问题所在,并在django.contrib.auth.views.LoginView课堂上找到了它。此类有一个方法get_success_url,该方法从next参数或LOGIN_REDIRECT_URL获取重定向 url。此方法用于填充方法get_context_data中登录表单的上下文,我认为这是不正确的。dispatch方法还使用get_success_url来获取重定向 URL,这是正确的,因为目的是实际重定向。

我不确定我的解释是否清楚,如果不是,请告诉我。有解决方法吗?我应该为此提交错误报告吗?

用:

  • Python: 3.6 (Anaconda3, 64 bit)
  • 姜戈:1.11.1
  • 姜戈注册:2.2

提出了 Django 错误 https://code.djangoproject.com/ticket/28229。

这不是解决方案,而更像是一种解决方法:

假设您的LOGIN_REDIRECT_URL设置为/,您可以编写{% if next != "/" %}而不是{% if next %}

最新更新