Django 和 Websocket 给出错误索引:WebSocket 连接到 'ws://127.0.0.1:8000/ws/chat/example/' 失败:

问题描述 投票:0回答:1

我正在关注有关 Django 频道的教程,但遇到无法解决的错误。 在网络控制台中显示:

index(16):与“ws://127.0.0.1:8000/ws/chat/example1/”的 WebSocket 连接失败:

这里是settings.py:

ASGI_APPLICATION = "core.routing.application"

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

routing.py 项目级别的文件:

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

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

asgi.py:

import os
from django.core.asgi import get_asgi_application

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'core.settings')
application = get_asgi_application()

应用级别的routing.py:

from django.urls import re_path
from django.conf.urls import url
from . import consumers

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

消费者.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()

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

    async def receive(self, text_data):
        text_data_json = json.loads(text_data)
        message = text_data_json['message']
        username = text_data_json['username']

        await self.channel_layer.group_send(
            self.room_group_name,
            {
                'type': 'chatroom_message',
                'message': message,
                'username': username,
            }
        )

    async def chatroom_message(self, event):
        message = event['message']
        username = event['username']

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

    pass

和 chatroom.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
    <title>Document</title>
</head>
<body>
    <div id="user-hello"></div>
    {{room_name|json_script:"room-name"}}
    <script>
        const roomName = JSON.parse(document.getElementById('room-name').textContent)
        console.log(roomName)
        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>
</body>
</html>

我希望我发布了你们需要的所有细节。如果您需要更多信息,请告诉我。我在默认的 django 本地服务器上运行这个项目。

python django websocket django-channels channels
1个回答
-1
投票

我得到了同样的错误。你想出来了吗?如果是,请告诉我。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.