Как предотвратить ошибку маршрутизации Django Channels?
Маршрут для проекта Django Channels, который я создаю, не работает, и на данный момент я не могу сказать почему. Мне кажется, что все в порядке, но я получаю одну и ту же ошибку от сервера снова и снова.
Я знаю, что есть что-то, чего мне не хватает, но что это может быть?
Установка ASG
import os
from channels.routing import ProtocolTypeRouter
from channels.routing import URLRouter
from channels.auth import AuthMiddlewareStack
from django.core.asgi import get_asgi_application
from chat import routing
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "base_app.settings")
# Handles routing protocols for Django Channels
application = ProtocolTypeRouter(
{
"http": get_asgi_application(),
# Points root routing to chat/routing.py
"websocket": AuthMiddlewareStack(URLRouter(routing.websocket_urlpatterns)),
}
)
Маршрут каналов
# chat/routing.py
from django.urls import re_path, path
from .consumer import ChatConsumer
websocket_urlpatterns = [
re_path(r"ws/chat/(?P<chat_id>\d+)/$", ChatConsumer.as_asgi()),
]
Каналы потребительские
Ошибка отслеживания
Exception inside application: No route found for path ''.
Traceback (most recent call last):
File "c:\projects\chatter\venv\lib\site-packages\channels\staticfiles.py", line 44, in __call__
return await self.application(scope, receive, send)
File "c:\projects\chatter\venv\lib\site-packages\channels\routing.py", line 71, in __call__
return await application(scope, receive, send)
File "c:\projects\chatter\venv\lib\site-packages\channels\sessions.py", line 47, in __call__
return await self.inner(dict(scope, cookies=cookies), receive, send)
File "c:\projects\chatter\venv\lib\site-packages\channels\sessions.py", line 254, in __call__
return await self.inner(wrapper.scope, receive, wrapper.send)
File "c:\projects\chatter\venv\lib\site-packages\channels\auth.py", line 181, in __call__
return await super().__call__(scope, receive, send)
File "c:\projects\chatter\venv\lib\site-packages\channels\middleware.py", line 26, in __call__
return await self.inner(scope, receive, send)
File "c:\projects\chatter\venv\lib\site-packages\channels\routing.py", line 168, in __call__
raise ValueError("No route found for path %r." % path)
ValueError: No route found for path ''.
WebSocket DISCONNECT / [127.0.0.1:3378]
Попробуйте это:
Сначала импортируйте класс AllowedHostsOriginValidator
из channels.security.websocket
from channels.security.websocket import AllowedHostsOriginValidator
затем передайте класс AuthMiddlewareStack
в AllowedHostsOriginValidator
.
# Handles routing protocols for Django Channels
application = ProtocolTypeRouter(
{
"http": get_asgi_application(),
# Points root routing to chat/routing.py
"websocket": AllowedHostsOriginValidator
AuthMiddlewareStack(
URLRouter(routing.websocket_urlpatterns)
)
),
}
)