14

djangoのユーザーモデルにはlast_loginフィールドがあります。これは、すべてのユーザーがサイトを離れるたびにログアウトする場合に最適ですが、そうでない場合はどうなりますか?

ログアウトしたことがないユーザーとそのサイトでのアクティビティを追跡するにはどうすればよいですか?

4

2 に答える 2

26

last_activityユーザー プロファイル (またはカスタム ユーザー モデル)にフィールドが必要です。このフィールドは、リクエストごとに更新されます。これを実現するには、カスタム ミドルウェアが必要です。

プロファイル/ミドルウェア.py:

from django.utils import timezone

from myproject.profiles.models import Profile


class UpdateLastActivityMiddleware(object):
    def process_view(self, request, view_func, view_args, view_kwargs):
        assert hasattr(request, 'user'), 'The UpdateLastActivityMiddleware requires authentication middleware to be installed.'
        if request.user.is_authenticated():
            Profile.objects.filter(user__id=request.user.id) \
                           .update(last_activity=timezone.now())

このミドルウェアを設定ファイルに追加します。

MIDDLEWARE_CLASSES = (
    # other middlewares
    'myproject.profiles.middleware.UpdateLastActivityMiddleware',
)
于 2013-02-04T11:24:53.307 に答える
3

私は質問が古いことを知っています...そして確かにそれはすでに解決されています...しかし、ここに私の貢献があります... djangoの新しいバージョンでは、次を使用できます:

「セッション時間」 -> 構成ファイルで使用されます。「設定.py」

ユーザーがブラウザを閉じると、セッションが終了し、再度ログインする必要があります...
SESSION_EXPIRE_AT_BROWSER_CLOSE = True

ユーザーがブラウザを閉じない場合、セッションの時間制限を設定できます...
SESSION_COOKIE_AGE = 60 * 60 

「SESSION_COOKIE_AGE」の場合、正しく覚えていれば秒単位で定義されています。ここで詳細を見ることができます...推奨される読書は、セッションに関するdjango独自のドキュメントでもあります...

于 2020-06-24T23:53:00.227 に答える