Задать вопрос

Scope в django_channels ищет аргумент на всех страницах из URLRouter, как исправить?

Мне нужно поддерживать соединение сокетов на нескольких страниц, URLRouter такой:
URLRouter([
    path('device/<device_name>',IndicatorConsumer),
    path('add',IndicatorConsumer),
    path('', IndicatorConsumer)
])

В консьюмерах так:
async def websocket_connect(self,event):
    print('connection succefull ', event)
    await self.send({
        'type': 'websocket.accept'
    })
    self.device_id = self.get_device_id(self.scope['url_route']['kwargs']['device_name'])

Через scope мне нужно получить device_name, чтобы отправить его в другую функцию, но скоуп почему то ищет это на всех страницах, которые есть в URLRouter. Так, например, в /add сокет сразу закрывается, потому что он не может найти там device_name.

На страницах с device все работает хорошо, на других получаю ошибку: Exception inside application: 'device_name'
  • Вопрос задан
  • 65 просмотров
Подписаться 1 Средний 6 комментариев
Решения вопроса 1
alternativshik
@alternativshik
if   'device_name' in self.scope['url_route']['kwargs']:
    self.device_id = self.get_device_id(self.scope['url_route']['kwargs']['device_name'])
    # тут код для device_name
else:
    # тут код для остальных урлов


ну и конечно же, возможны еще варианты...
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы