视图之间的 Django 身份验证

Posted

技术标签:

【中文标题】视图之间的 Django 身份验证【英文标题】:Django authentication between views 【发布时间】:2018-06-02 04:44:29 【问题描述】:

我在使用 django 身份验证时遇到了一些问题 我有一个使用装饰器@login_required 的视图。

一旦登录,用户将进入一个页面,填写一些数据并使用发布请求访问下一页,但是当尝试返回上一页时,django 将再次显示登录表单。 有没有办法防止这种情况发生?

我正在考虑使用按钮返回会话的帖子,因此 django 不会再次要求登录,但我不确定是否可以这样做。

【问题讨论】:

“尝试返回”是使用浏览器的后退按钮还是使用网页中的按钮? 【参考方案1】:

如果您不希望已登录的用户看到登录表单,我建议您将已登录的用户重定向到另一个页面:

def login_page(request):
    if request.user.is_authenticated:
        return redirect('some-other-page')
    [...the rest of the login-page logic goes here; pass form through via context...]

您还可以在登录页面上向登录用户显示一条消息,告诉他们他们已经使用模板逻辑登录:

% if request.user.is_authenticated %
    <p>You are already logged in</p>
% else %
    <form>
         form 
        <input type='submit'>Submit</input>
    </form>
% endif %

【讨论】:

以上是关于视图之间的 Django 身份验证的主要内容,如果未能解决你的问题,请参考以下文章

如何在 django 的类视图上进行身份验证

基于 Django 类的视图中的身份验证用户

Django 基于类的通用视图和身份验证

带有内置登录视图和身份验证表单的 Django “记住我”

Django Rest Framework 避免身份验证 JWT

Django 1.6 和 django-registration:内置身份验证视图未拾取