Передача параметра ID в обработчик подключения Django Channel для одноканальных слоев

Я устанавливаю одноканальный уровень вебсокета, как описано здесь https://channels.readthedocs.io/en/stable/topics/channel_layers.html#single-channels

Но проблема в том, что мне нужно передать параметр метаданных в метод connect от инициализации websocket на стороне клиента, потому что иначе нет способа сослаться на него вне Consumer. Например, представьте, что я хочу использовать SESSION_ID в качестве ключа поиска имени канала. Только клиент знает SESSION_ID. Я хочу иметь возможность сделать что-то вроде:

client.js (передайте идентификатор сессии в соединение websocket каким-то образом)

monitorWS = new WebSocket('ws://localhost:9000/ws/api/monitor/?SESSION_ID=762123')

consumer.py (сохраните идентификатор сессии с автоматически сгенерированным именем канала) class ChatConsumer(WebsocketConsumer):

    def connect(self):
        # Make a database row with our channel name
        Session.objects.create(channel_name=self.channel_name, id=[SESSION_ID])

Как я могу передать этот параметр ID, чтобы мой код вне Consumer мог получить имя одного канала, чтобы я мог сделать что-то вроде этого:

elsewhere.py

from channels.layers import get_channel_layer
channel_layer = get_channel_layer()
session=Session.objects.get(id=762123) # get the session object in the example

await channel_layer.send(session.channel_name, { 
    "type": "chat.message",
    "text": "Hello there!",
})
Вернуться на верх