我需要一些帮助来了解如何测试用户当前是否已登录。我在网上搜索,发现有一些解决方法可以从请求中提取用户并测试它:
if request.user.is_authenticated():
然而,在我的情况下,我需要以下内容:
user = User.objects.get(id=1)
if user.is_logging_in():
# do something
else:
# do something else
Django中是否存在这种功能?谢谢!
答案 0 :(得分:1)
我不相信该信息以受支持的方式存在。我的理解是,用户身份验证系统使用SessionMiddleware来存储会话是否具有与之关联的经过身份验证的用户。为了澄清,当用户登录时,会话存储的数据表明另一方的客户端是用户等等。
您需要做的是完成所有会话并确定会话是否具有关联用户,如果是,则确定该用户是谁。据我所知,没有办法迭代会话,但我可能是错的。
从this answer我找到了一种可以达到同样效果的方法。
from django.contrib.auth.signals import user_logged_in, user_logged_out
def record_user_logged_in(sender, user, request, **kwargs):
# Record the user logged in
def record_user_logged_out(sender, user, request, **kwargs):
# Record the user logged out
user_logged_in.connect(record_user_logged_in)
user_logged_out.connect(record_user_logged_out)
我会告诉你如何存储与登录/退出相关的信息,但模型是一种很好的方法。我应该指出,我不相信这会涵盖用户凭据超时的情况(从会话超时)。
此外,我刚遇到this answer链接here这是一个跟踪活跃用户的项目。我不确定它增加了多少开销,但只是想我会添加它。