Django: Как я могу проверить последнее время активности пользователя, если пользователь не вышел из системы?

django Пользовательская модель имеет поле last_login, что отлично, если все пользователи должны были выходить из системы каждый раз, когда они покидают сайт, но что, если они этого не делают?

Как я могу отслеживать пользователя, который никогда не выходил из системы и его активность на сайте?

Ответ 1

В профиле пользователя (или пользовательской модели пользователя) должно быть поле last_activity. Это поле будет обновляться по каждому запросу. Чтобы достичь этого, вам нужно иметь специальное промежуточное программное обеспечение:

профили/middleware.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',
)