Концепция активности пользователя с использованием 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
]