Django - отображать количество пользователей смотрящих трансляцию на данный момент

Я разрабатываю сайт на Django для сервиса с трансляциями спортивных игр. Нужно выводить количество пользователей которые на данный момент смотрят трансляцию. Просматривать трансляцию можно только после авторизации.

Кто-то может подсказать как реализовать это лучше всего?

По итогу пришлось использовать websockets(django channels). Но как оказалось это не столь сложно как мне показалось изначально.

consumers.py

import json
from channels.generic.websocket import WebsocketConsumer
from .models import Translation


class Watcher(WebsocketConsumer):
    def connect(self):
        self.accept()
        self.send(text_data=json.dumps({
            'type': 'start watch',
            'message': 'User started watching stream'
        }))
        pk = self.scope["url_route"]["kwargs"]["pk"]
        data = Translation.objects.get(id=pk)
        data.online += 1
        data.save()

    def disconnect(self, code):
        pk = self.scope["url_route"]["kwargs"]["pk"]
        data = Translation.objects.get(id=pk)
        data.online -= 1
        data.save()

javascript

let url = `ws://${window.location.host}/ws/socket-server/{{ pk }}/`
                            const viewStream = new WebSocket(url)
                            viewStream.onmessage = function (e) {
                                let data = JSON.parse(e.data);
                                console.log("DATA: ", data);

                            }

Этот код даст возможность отслеживать количество пользователей на каждой странице, но вам понадобиться еще прописать в моделях online. Надеюсь мои поиски помогут еще кому то кроме меня.

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