如何检查用户是否已登录(如何正确使用用户。是否经过身份验证)?

2024-04-20 03:16:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在查看this website,但似乎不知道怎么做,因为它不起作用。我需要检查当前站点用户是否已登录(经过身份验证),并正在尝试:

request.user.is_authenticated

尽管确定用户已登录,但它只返回:

>

我可以执行其他请求(来自上面url的第一部分),例如:

request.user.is_active

返回一个成功的响应。


Tags: 用户身份验证url站点isrequestwebsitethis
3条回答

Django 1.10+

使用属性,而不是方法:

if request.user.is_authenticated: # <-  no parentheses any more!
    # do something if the user is authenticated

Django 2.0中不赞成使用相同名称的方法,Django文档中不再提到该方法。


注意,对于Django 1.10和1.11,属性的值是一个CallableBool,而不是一个布尔值,这可能会导致一些奇怪的错误。 例如,我有一个返回JSON的视图
return HttpResponse(json.dumps({
    "is_authenticated": request.user.is_authenticated()
}), content_type='application/json') 

更新到属性request.user.is_authenticated后,引发异常TypeError: Object of type 'CallableBool' is not JSON serializable。解决方案是使用JsonResponse,它可以在序列化时正确处理CallableBool对象:

return JsonResponse({
    "is_authenticated": request.user.is_authenticated
})

Django 1.10+更新:is_authenticated现在是Django 1.10中的一个属性。为了向后兼容,该方法仍然存在,但将在Django 2.0中删除。

适用于Django 1.9及以上版本

is_authenticated是一个函数。你应该这样称呼它

if request.user.is_authenticated():
    # do something if the user is authenticated

正如Peter Rowell所指出的,可能会让您绊倒的是,在默认的Django模板语言中,您不需要在括号上加上调用函数。所以您可能在模板代码中看到了类似的内容:

{% if user.is_authenticated %}

然而,在Python代码中,它确实是User类中的一个方法。

以下程序块应有效:

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

相关问题 更多 >