Django内置登录 View 和错误

标签 django django-authentication django-login

我正在使用 django.contrib.auth.views.login 和 .logout View 。非常方便,开箱即用,可以再次部署 AAA+ 等。

出现问题是因为我没有使用单独的登录页面,而是每个页面都有一个登录框(当然,除非用户已登录)。因此,当用户名/密码组合错误时,我会收到错误消息。 这三个路径我应该选择哪一个?

  • 有一种 secret 方法可以在成功时和错误时重定向到下一个。如果是的话,请告诉我!
  • 我编写了自己的登录 View ,同时使用 Django 的消息系统
  • 我编写了一个登录页面(好吧,它只是缺少一个模板),这样我就可以充分利用 Django 身份验证系统的全部功能。

最佳答案

可能的解决方案之一(列表中的第一个+第三个选择):

  1. 您必须提供特殊的登录页面(即定义 registration/login.html ) 对于未登录的用户,每个普通页面都有登录表单;
  2. 如果用户正常登录(此逻辑在 django.contrib.auth.views.login 中处理):
    • 对于普通页面:将用户重定向到她登录的页面;
    • 登录页面:如果有next param,重定向到那里,否则重定向到主页;
  3. 如果用户登录失败:重定向(或重绘)登录页面并提供错误信息;
  4. 如果用户已登录:普通页面提供注销链接(如果用户想要重新登录或通过其他帐户登录,特殊页面仍然存在)。

在普通页面中,登录表单应该有这样的内容 <input type="hidden" name="next" value="{{ request.path }}" /> .

在项目设置中:

# in settings.py
LOGIN_URL = '/login'     # this should coinside with url pattern of login view
LOGOUT_URL = '/logout'   # same but for logout view
LOGIN_REDIRECT_URL = '/' # url to main page

注意:我不使用 django 的内置注销 View ,而是使用我自己的:几乎相同,但仅针对 POST 请求注销。这不允许用户通过 <img src='my_site/logout' /> 注销恶意代码。

关于Django内置登录 View 和错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4324559/

相关文章:

python - 从 HTML 修改 Django 数据时出错

python - Django - 身份验证不会向用户添加后端

django - 有什么方法可以更改用户身份验证登录页面中的用户名字段标签?

python - Django Forbidden 403 Error "CSRF token missing or incorrect"已登录时尝试登录

python - 从 Python 使用 Spark 所需的库 (PySpark)

django - 使用 Vagrant 进行端口转发时连接重置

php - 如何在一台 Apache 服务器上同时运行 Django 和 PHP?

django - 扩展 `auth.models.User` 和用户登录、注销

python - 如何在 django-rest-framework 中为 API 使用 TokenAuthentication

django - 通过 Django 中的后端身份验证创建时将用户标记为新用户