Концепция активности пользователя с использованием django

Мне нужно сделать функцию, которая показывает, активен ли пользователь или нет (как на facebook). Какой лучший и наиболее распространенный способ сделать это? Моя концепция выглядит следующим образом:

Когда пользователь входит в систему или обновляет JWT-токен, запускается цикл javascript, который посылает, например, каждые 3 минуты пост-запрос, который устанавливает внутри объекта модели User текущую дату. Затем, если другой пользователь зайдет в профиль этого пользователя, он получит дату из объекта User и проверит current date minus the date from User object < 3 min - если да, значит пользователь активен, иначе он не активен.

Является ли это хорошим способом? Должен ли я использовать для этого websockets? Я использую DRF и React.

Мой предпочтительный способ отслеживания активности пользователей - с помощью некоторого пользовательского промежуточного программного обеспечения. Основная проблема с циклами javascript заключается в том, что если пользователь оставляет браузер открытым, он может быть ошибочно определен как активный на вашем сайте. Отслеживание последней активности с помощью промежуточного ПО требует запроса от пользователя, что гарантирует, что он действительно активен. Я включил пример ниже, чтобы вы могли проследить:

# custom_middleware.py

class LastActiveMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        # Update last activity
        user = request.user
        if user.is_authenticated:
            last_active = user.last_active
            now = timezone.now()
            if last_active <= now - datetime.timedelta(minutes=3):
                user.last_active = now
                user.save()

        response = self.get_response(request)

        return response

Затем добавьте ваше пользовательское промежуточное ПО в MIDDLEWARE в настройках:

# settings.py

MIDDLEWARE = [
    ...
    custom_middleware.LastActiveMiddleware
]
Вернуться на верх