2012-04-14 68 views
3

如何知道某個特定用戶是否在Django中登錄(不是當前的請求用戶)?如何知道是否在Django中登錄了特定用戶而不是當前請求用戶?

我嘗試這樣做:

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

但這總是返回True如果username匹配。

+1

@linker不,它不是重複的。那個人正在引用這個函數,但沒有調用它。 rayashi明確地調用了該函數。 – agf 2012-04-14 20:13:59

+1

對於誰downvoted - 我認爲這是一個很好的問題(我沒票了)。他展示了他所嘗試的,並告訴我們爲什麼這不適合他。 – agf 2012-04-14 20:18:58

+1

你上課時怎麼上課?大多數情況下,如果你想知道這一點,你想知道他們是否活躍 - 不僅僅是他們自上次登錄以來沒有註銷過。如果是這樣,自從他們上次查看頁面起,多長時間計爲活性? – 2012-04-14 20:20:03

回答

1

沒有內置的方法來執行您正在查找的內容,但是有一個應用程序可以插入到您的項目中,讓您按照自己的需要進行操作。這就是所謂的django跟蹤,你可以在這裏找到它:https://github.com/codekoala/django-tracking

編輯哎呀!我被打敗了,但基本上是馬克拉文所說的。

+0

對不起..我不能導入「from tracking.models import Visitor」它返回「未解析的導入:訪問者 未使用的導入:訪問者」 – rayashi 2012-04-16 19:47:09

+0

確保python可以找到你存儲跟蹤應用程序的位置。如果你使用的是Eclipse,這應該是一個簡單的事情,即將位置添加到項目引用的庫中。如果沒有,那麼你將不得不手動編輯你的'PYTHONPATH'系統變量。 – chandsie 2012-04-17 01:15:21

4

簡短的回答是你不能;至少沒有內置到Django的任何東西。要知道數據庫中的任何用戶是否已登錄,實質上是詢問用戶是否與活動會話綁定。但是,您不能查詢會話表(僅查詢所有活動會話),因爲此信息存儲爲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

相關問題