Как узнать, что пользователь находится онлайн/оффлайн с помощью каналов 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',
]
Обратите внимание, ваше промежуточное ПО должно активироваться после того, как пользователь вошел в систему. Теперь вы можете использовать эту модель любым удобным для вас способом и получать информацию о пользователе в том представлении, которое вам нужно.