2012-04-14 15 views
3

特定のユーザがDjangoにログインしているかどうかを知るにはどうしたらいいですか?現在の要求ユーザではなく、特定のユーザがDjangoにログインしているかどうかを知る方法はありますか?

私はこの試みた:

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

をしかしusernameが一致した場合、これは常にTrueを返します。

+1

@linkerいいえ、それはまったく同じではありません。その人は関数を参照していましたが、呼び出していませんでした。 rayashiは明らかに関数を正しく呼び出しています。 – agf

+1

誰にでも落札した人には、これは良い質問だと思います(私は票が足りません)。彼は自分が試したことを示し、なぜ彼が彼のために働いていないのかを教えてくれました。 – agf

+1

あなたはどのようなクラスでログインしていますか?たいていの場合、これを知りたければ、最後にログインしてからログアウトしていないだけでなく、アクティブであるかどうかを知りたい場合は、最後にページを閲覧してからの経過時間はアクティブですか? –

答えて

1

あなたが探していることを行うための組み込みメソッドはありませんが、あなたが望むことができるようにプロジェクトにプラグインできるアプリがあります。これはDjangoトラッキングと呼ばれ、ここで見つけることができます:https://github.com/codekoala/django-tracking

EDITおっと!私はそれに打ち勝ったが、基本的にMark Lavinが言ったことだ。

+0

申し訳ありません.. tracking.models import Visitorからインポートできません "未解決インポート:Visitor 未使用インポート:Visitor" – rayashi

+0

Pythonが追跡アプリケーションをどこに保存したのかを確認してください。 eclipseを使用している場合は、プロジェクト参照ライブラリに場所を追加するだけの簡単な作業です。そうでなければ、 'PYTHONPATH'システム変数を手動で編集する必要があります。 – chandsie

4

短い答えはできません。少なくともDjangoに組み込まれているものではありません。データベース内のユーザーがログインしているかどうかを確認するには、基本的にユーザーがアクティブなセッションに拘束されているかどうかを確認する必要があります。しかし、この情報はpickledデータとして保存されるため、ユーザーIDのセッションテーブル(すべてのアクティブなセッションのクエリには不足)を照会することはできません。これを行ってもセッションクッキーの持続時間(デフォルトは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と呼ばれるアプリしかありません。

関連する問題