Настройка каналов django

Я впервые работаю с каналами в django. Я пытаюсь установить вебсокетное соединение с моим сервером для приложения чата. Код javascript на html-странице выглядит так

<body>

    <div  id="user-hello"></div>

    {{ room_name|json_script:"room-name" }}
    <script>
        const roomName = JSON.parse(document.getElementById('room-name').textContent);
        const chatSocket = new WebSocket(
            'ws://' +
            window.location.host +
            '/ws/chat/' +
            roomName +
            '/'
        );

        chatSocket.onmessage = function (e) {
            const data = JSON.parse(e.data)
            console.log(data)
            document.querySelector('#user-hello').innerHTML =(data.tester)
        }
    </script>

    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-OERcA2EqjJCMA+/3y+gxIOqMEjwtxJY7qPCqsdltbNJuaOe923+mo//f6V8Qbsw3" crossorigin="anonymous"></script>
  </body>

Когда javascript пытается установить соединение с websocket, он выдает ошибку, не может найти url. Мой файл настроек выглядит следующим образом

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    'channels',

    'chat'
]

ASGI_APPLICATION = 'config.routing.application'

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

Файл routing.py, на который ссылается ASGI_APPLICATION, является

from channels.auth import AuthMiddlewareStack
from channels.routing import ProtocolTypeRouter, URLRouter
import chat.routing


application = ProtocolTypeRouter({
    'websocket': AuthMiddlewareStack(
        URLRouter(
            chat.routing.websocket_urlpatterns
        )
    ),
})

Файл Routing.py в приложении чата

from django.urls import re_path

from . import consumers

websocket_urlpatterns = [
    re_path(r'ws/chat/(?P<room_name>\w+)/$', consumers.ChatRoomConsumer.as_asgi()),
]

Наконец-то consumer.py стал

import json
from channels.generic.websocket import AsyncWebsocketConsumer 


class ChatRoomConsumer(AsyncWebsocketConsumer):
    async def connect(self): 
        self.room_name = self.scope['url_route']['kwargs']['room_name']
        self.room_group_name = 'chat_%s' % self.room_name

        await self.channel_layer.group_add(
            self.room_group_name, 
            self.channel_name
        )

        await self.accept()

        await self.channel_layer.group_send(
            self.room_group_name,
            {
                'type': 'tester_message',
                'tester': 'tester-data',
            }
        )

    async def tester_message(self, event):
        tester =  event['tester']

        await self.send(text_data=json.dumps({
            'tester': tester,
        }))

    async def disconnect(self, close_code):
        await self.channel_layer.group_discard(
            self.room_group_name,
            self.channel_name
        )
    pass

Какова может быть причина ошибки? Насколько я могу судить, мои урлы в порядке.

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