如何知道Django中是否记录了特定用户,而不是当前请求用户?

时间:2012-04-14 20:06:12

标签: python django authentication

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

我试过了:

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

但如果True匹配,则总会返回username

2 个答案:

答案 0 :(得分:4)

简短的回答是你不能;至少没有任何内置于Django的内容。要知道数据库中的任何用户是否已登录,您实际上是在询问用户是否与活动会话绑定。但是您无法查询会话表(缺少查询所有活动会话)的用户ID,因为此信息存储为pickle数据。即使你这样做也不完全有意义,具体取决于会话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

答案 1 :(得分:1)

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

编辑哎呀!我被击败了,但基本上是Mark Lavin所说的。