Соединение с веб-сокетом. Пользователи онлайн. Бекенд и фронтенд.

Любой клас сокет потребителя обязательно включает 3 метода - коннект, дисконнект и приход сообщения в сокет.

Создадим простой потребитель online/online_consumer.py

Добавим его в приложение backend/backend/channels_app.py.

Расширим метод приема сообщения, добавив туда условие при котором приходит сообщение авторизации с action = ‘login’.

Дело в том, что в channels нужно явно авторизовывать пользователя чтобы иметь возможность потом в консьюмере получать пользователя, приславшего сообщение по сокету.

Отработаем вариант прихода такого сообщения.

from channels.generic.websocket import WebsocketConsumer
import json

class OnlineConsumer(WebsocketConsumer):

    def connect(self):
        print('Connnect!!!')
        self.accept()
        self.send(text_data=json.dumps({ \
            'type': 'online:ping', \
            'payload': 'ping from server' \
            } \
        ))

    def disconnect(self, close_code):
        # Channel.objects.filter(name=self.channel_name).delete()
        print('DISCONNECT!!! ONLINE')

    def receive(self, text_data):
        text_data_json = json.loads(text_data)
        print(text_data_json)
from channels.routing import ProtocolTypeRouter, URLRouter
from online.online_consumer import OnlineConsumer
from django.urls import re_path
from channels.auth import AuthMiddlewareStack


websocket_urlpatterns = [
    re_path(r'online/$', OnlineConsumer),
]

application = ProtocolTypeRouter({
    'websocket': AuthMiddlewareStack(
        URLRouter(
            websocket_urlpatterns
        )
    ), 
})
admin
Потратить 2 кредита и начать обучение!
Задать вопрос, прокомментировать.