我正在查看 此网站,但似乎无法弄清楚如何执行此操作,因为它不起作用。我需要检查当前站点用户是否已登录(经过身份验证),并且正在尝试:
request.user.is_authenticated
尽管确定用户已登录,但它只返回:
>
我能够执行其他请求(来自上面网址的第一部分),例如:
request.user.is_active
返回成功的响应。
原文由 Rick 发布,翻译遵循 CC BY-SA 4.0 许可协议
我正在查看 此网站,但似乎无法弄清楚如何执行此操作,因为它不起作用。我需要检查当前站点用户是否已登录(经过身份验证),并且正在尝试:
request.user.is_authenticated
尽管确定用户已登录,但它只返回:
>
我能够执行其他请求(来自上面网址的第一部分),例如:
request.user.is_active
返回成功的响应。
原文由 Rick 发布,翻译遵循 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 许可协议
2 回答5.3k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决
4 回答1.5k 阅读✓ 已解决
3 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
2 回答941 阅读✓ 已解决
1 回答1.8k 阅读✓ 已解决
Django 1.10+ 更新
is_authenticated
现在是 Django 1.10 中的一个 属性。注意:该方法在 Django 2.0 中被删除。
对于 Django 1.9 及更早版本
is_authenticated
是一个函数。你应该这样称呼它正如 Peter Rowell 指出的那样,可能让您感到困惑的是,在默认的 Django 模板语言中,您不会在调用函数时加上括号。所以你可能在模板代码中看到过这样的东西:
但是,在Python代码中,它确实是
User
类中的一个方法。