【问题标题】:Django doesn't remember authenticated userDjango 不记得经过身份验证的用户
【发布时间】:2015-06-15 15:42:39
【问题描述】:

我有一个简单的登录功能。

def login(request):
    args = {}
    args.update(csrf(request))
    if request.POST:
        username = request.POST['username']
        password = request.POST['password']
        user = auth.authenticate(username=username, password=password)
        if user is not None:
            auth.login(request, user)
            return redirect('/')
        else:
            return redirect('/')
    else:
        return redirect('/')

在我的模板中,我使用if 语句仅针对经过身份验证的用户显示一些块:

{% if username %}
    <div class="container">
        <div class="span6">Welcome!<strong> {{ username }}</strong></div>
{% endif %}

但是当我成功登录时,这个块没有显示。我猜是redirect('/') 的问题。如果是这样,那我就不明白了:当我重定向到主页时,用户是否已注销? 对于主页,我使用下一个视图:

def index(request):
    args = {}
    args.update(csrf(request))
    return render(request, 'index.html', args)

【问题讨论】:

    标签: django django-views


    【解决方案1】:

    使用user 上下文变量来显示用户名。并且应该使用用户实例的is_authenticated() 方法来从匿名中确定登录用户:

    {% if user.is_authenticated %}
        Welcome! <strong>{{ user.username }}</strong>
    {% endif %}
    

    【讨论】:

    • 渲染调用需要加args吗?我正在为 csrf 做这件事。据我所知,render 自动包含 RequestContext,但我的问题是 RequestContext 是否包含 csrf(request)?
    • render() 快捷方式的第三个参数是可选的,因此您可以放心地省略它:render(request, 'index.html')RequestContext 将包含有效的 CSRF 数据。
    猜你喜欢
    • 2016-11-30
    • 1970-01-01
    • 2020-11-15
    • 2016-01-17
    • 1970-01-01
    • 2018-01-07
    • 2013-11-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多