3

我如何知道特定用户是否已登录 Django(不是当前请求的用户)?

我试过这个:

user = User.objects.get(username="jon")
if user.is_authenticated():
   print "user logged"

True但是如果username匹配,这总是返回。

4

2 回答 2

4

简短的回答是你不能;至少没有 Django 内置的任何东西。要知道数据库中的任何用户是否已登录,您实际上是在询问该用户是否与活动会话相关联。但是您不能查询用户 ID 的会话表(没有查询所有活动会话),因为此信息存储为腌制数据。即使您这样做了,这也不是完全有意义的,具体取决于会话 cookie 的持续时间(默认 2 周)。

所以,你可以做什么?您可以查询有关用户的一件事是他们上次登录的时间。例如,您可以获得最后一次登录不到 10 分钟前的用户:

from datetime import datetime, timedelta
from django.contrib.auth.models import User

cutoff = datetime.now() - timedelta(minutes=10)
active = User.objects.filter(last_login__gt=cutoff)

您可以做的另一件事是自行跟踪。事实上,有一个应用程序可以做到这一点,叫做django-tracking

于 2012-04-14T20:34:37.743 回答
1

没有内置的方法来做你正在寻找的事情,但是有一个应用程序可以插入到你的项目中,让你做你想做的事。它被称为 django-tracking,你可以在这里找到它:https ://github.com/codekoala/django-tracking

编辑哎呀!我被打败了,但基本上是马克拉文所说的。

于 2012-04-14T20:36:55.847 回答