Как предотвратить ошибку маршрутизации 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)
           )
        ),
    }
)
Вернуться на верх