如何检查用户是否登录(如何正确使用user.is_authenticated)?

新手上路,请多包涵

我正在查看 此网站,但似乎无法弄清楚如何执行此操作,因为它不起作用。我需要检查当前站点用户是否已登录(经过身份验证),并且正在尝试:

 request.user.is_authenticated

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

 >

我能够执行其他请求(来自上面网址的第一部分),例如:

 request.user.is_active

返回成功的响应。

原文由 Rick 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 490
2 个回答

Django 1.10+ 更新

is_authenticated 现在是 Django 1.10 中的一个 属性

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

注意:该方法在 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 类中的一个方法。

原文由 Brian Neal 发布,翻译遵循 CC BY-SA 4.0 许可协议

姜戈 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
})

原文由 Mark Chackerian 发布,翻译遵循 CC BY-SA 3.0 许可协议

推荐问题