Как узнать, что пользователь находится онлайн/оффлайн с помощью каналов django?

С помощью Django Channels вы можете отслеживать, какие пользователи находятся онлайн или офлайн на вашем сайте? Должна ли каждая страница иметь websocket-соединение? И когда пользователь находится онлайн/оффлайн, как я могу показать его онлайн/оффлайн в реальном времени.

Я понятия не имею. Я делаю только групповые чаты онлайн пользователей, но не могу сделать пользователей онлайн/оффлайн в полном сайте

Чтобы показывать пользователей как онлайн/офлайн в режиме реального времени, вы можете обновлять их статус в базе данных, когда они подключаются/отключаются от WebSocket. Вы можете периодически проверять статус подключения пользователя, отслеживая его WebSocket-соединение или используя сигналы heartbeat. Здесь я буду использовать версию с сигналами сердцебиения (здесь я предполагаю, что у вас есть приложение с именем chat): Прежде всего, создайте модель, которая хранит состояние пользователя, а именно last_activity. как эта :

class UserActivity(models.Model):
    user          = models.OneToOneField(User, on_delete=models.CASCADE)
    last_activity = models.DateTimeField(default=timezone.now)

    def update_activity(self):
        self.last_activity = timezone.now()
        self.save()

Если вам нужны дополнительные поля, добавьте их и не забудьте добавить в панель администратора. Теперь вам нужно промежуточное ПО для проверки того, находится ли пользователь в сети или нет :

from django.utils.deprecation import MiddlewareMixin
from django.utils import timezone

from chat.models import UserActivity


class UserActivityMiddleware(MiddlewareMixin):    

    def process_request(self, request):
        if request.user.is_authenticated:
            UserActivity.objects.update_or_create(user=request.user, defaults={'last_activity': timezone.now()})

Теперь добавьте это промежуточное ПО после, Auth промежуточного ПО следующим образом :

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',    
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    
    # Here your middleware should go
    'chat.middleware.UserActivityMiddleware',
]

Обратите внимание, ваше промежуточное ПО должно активироваться после того, как пользователь вошел в систему. Теперь вы можете использовать эту модель любым удобным для вас способом и получать информацию о пользователе в том представлении, которое вам нужно.

Вернуться на верх