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, который вы пытаетесь вызвать, вы должны сразу понять, что шаблоны не совпадают.