Django websocket ValueError

Когда я обращаюсь к вебсокету на несуществующем put (ws://127.0.0.1:8000/ws/dgd/), django выдает ошибку

Является ли это нормальным поведением или мне следует разобраться с этим случаем?

2021-10-04 11:35:46 ERROR    server Exception inside application: No route found for path 'ws/dgd/'.
Traceback (most recent call last):
  File "/Users/934214/PycharmProjects/uhrg_2.0/venv/lib/python3.9/site-packages/channels/staticfiles.py", line 44, in __call__
    return await self.application(scope, receive, send)
  File "/Users/934214/PycharmProjects/uhrg_2.0/venv/lib/python3.9/site-packages/channels/routing.py", line 71, in __call__
    return await application(scope, receive, send)
  File "/Users/934214/PycharmProjects/uhrg_2.0/venv/lib/python3.9/site-packages/channels/sessions.py", line 47, in __call__
    return await self.inner(dict(scope, cookies=cookies), receive, send)
  File "/Users/934214/PycharmProjects/uhrg_2.0/venv/lib/python3.9/site-packages/channels/sessions.py", line 263, in __call__
    return await self.inner(wrapper.scope, receive, wrapper.send)
  File "/Users/934214/PycharmProjects/uhrg_2.0/venv/lib/python3.9/site-packages/channels/auth.py", line 185, in __call__
    return await super().__call__(scope, receive, send)
  File "/Users/934214/PycharmProjects/uhrg_2.0/venv/lib/python3.9/site-packages/channels/middleware.py", line 26, in __call__
    return await self.inner(scope, receive, send)
  File "/Users/934214/PycharmProjects/uhrg_2.0/venv/lib/python3.9/site-packages/channels/routing.py", line 168, in __call__
    raise ValueError("No route found for path %r." % path)
ValueError: No route found for path 'ws/dgd/'.

routing.py

websocket_urlpatterns = [
    re_path(r'^ws/user/(?P<pk>[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})/$', consumers.UserConsumer.as_asgi()),
]

settings.py

CHANNEL_LAYERS = {
    'default': {
        "BACKEND": "channels.layers.InMemoryChannelLayer"
    },
}

asgi.py

application = ProtocolTypeRouter({
  "http": get_asgi_application(),
  "websocket": AuthMiddlewareStack(
        URLRouter(
            websockets.routing.websocket_urlpatterns
        )
    ),
})

Я не уверен, что ваш вопрос заключается в том, нормально ли поведение используемой вами websocket-библиотеки или правильна ли ваша конфигурация, поэтому я постараюсь охватить оба варианта в своем ответе.

Конечно, нормально и важно для библиотеки (каналов) поднимать исключение, когда пользователь пытается подключиться к url, который не определен в вашей маршрутизации. Однако, это может загрязнить ваш файл(ы) протоколирования, когда пользователь пытается подключиться к несуществующему url несколько раз, поэтому вы можете захотеть реализовать некоторый обработчик, который протоколирует этот сценарий более элегантным способом.

Когда вы сравните url, который вы определили в вашем routing.py и url, который вы пытаетесь вызвать, вы должны сразу понять, что шаблоны не совпадают.

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