Django 如何知道用户是谁?
How does Django know who the user is?
根据 Django documentation,如果 Django 安装已激活 AuthenticationMiddleware,HttpRequest 对象有一个 "user" 属性代表当前登录的用户。请求对象如何知道用户是什么?中间件是否将用户设置在cookie中,并在用户登录后将该cookie保存到客户端浏览器?在我的代码中,我在用户登录后将其 ID(来自 auth_user table)保存到一个会话变量中,我通常会在每个页面上检查它。如果此信息在请求对象中始终可用,我就不需要这样做。我需要做的就是检查 request.user.id。这是正确的吗?
谢谢。
用户 ID 不存储在 cookie 中,而是存储在会话中。
是的,您不应该自己在会话中保存此数据:
if request.user.is_authenticated():
user_id = request.user.id
如果该视图仅对登录用户可用,则不要检查 request.user.is_authenticated()
,而是使用 @login_required
装饰器。
是的,您知道了,只是用户数据存储在会话中。你通过自己跟踪所有这些来做多余的工作——这是 Django 擅长的!
查看 this documentation on user objects
.. 和 this article on all of it specifically.
根据 Django documentation,如果 Django 安装已激活 AuthenticationMiddleware,HttpRequest 对象有一个 "user" 属性代表当前登录的用户。请求对象如何知道用户是什么?中间件是否将用户设置在cookie中,并在用户登录后将该cookie保存到客户端浏览器?在我的代码中,我在用户登录后将其 ID(来自 auth_user table)保存到一个会话变量中,我通常会在每个页面上检查它。如果此信息在请求对象中始终可用,我就不需要这样做。我需要做的就是检查 request.user.id。这是正确的吗?
谢谢。
用户 ID 不存储在 cookie 中,而是存储在会话中。
是的,您不应该自己在会话中保存此数据:
if request.user.is_authenticated():
user_id = request.user.id
如果该视图仅对登录用户可用,则不要检查 request.user.is_authenticated()
,而是使用 @login_required
装饰器。
是的,您知道了,只是用户数据存储在会话中。你通过自己跟踪所有这些来做多余的工作——这是 Django 擅长的! 查看 this documentation on user objects .. 和 this article on all of it specifically.