我正在使用 django.contrib.auth.views.login 和
.logout
View 。非常方便,开箱即用,可以再次部署 AAA+ 等。
出现问题是因为我没有使用单独的登录页面,而是每个页面都有一个登录框(当然,除非用户已登录)。因此,当用户名/密码组合错误时,我会收到错误消息。 这三个路径我应该选择哪一个?
- 有一种 secret 方法可以在成功时和错误时重定向到下一个。如果是的话,请告诉我!
- 我编写了自己的登录 View ,同时使用 Django 的消息系统
- 我编写了一个登录页面(好吧,它只是缺少一个模板),这样我就可以充分利用 Django 身份验证系统的全部功能。
最佳答案
可能的解决方案之一(列表中的第一个+第三个选择):
- 您必须提供特殊的登录页面(即定义
registration/login.html
) 对于未登录的用户,每个普通页面都有登录表单; - 如果用户正常登录(此逻辑在
django.contrib.auth.views.login
中处理):- 对于普通页面:将用户重定向到她登录的页面;
- 登录页面:如果有
next
param,重定向到那里,否则重定向到主页;
- 如果用户登录失败:重定向(或重绘)登录页面并提供错误信息;
- 如果用户已登录:普通页面提供注销链接(如果用户想要重新登录或通过其他帐户登录,特殊页面仍然存在)。
在普通页面中,登录表单应该有这样的内容 <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/