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.