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週間)によっては、完全に意味があるわけではありません。

それで、あなたは何ができますか?ユーザーについて照会できることの1つは、ユーザーが最後にログインした時刻です。たとえば、最後にログインしたユーザーを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 に答える