Передача параметра 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!",
})