【问题标题】:django-channels: no route found for pathdjango-channels:找不到路径的路由
【发布时间】:2021-11-23 21:25:01
【问题描述】:

我一直在 django-channels 上关注本教程:https://youtu.be/RVH05S1qab8

我按照视频中的每个步骤进行操作,首先,当我遇到问题时,我重新观看并再次按照以确保我做的所有事情都正确,但事实并非如此。

我对 django 还很陌生,所以如果我的解释不准确,我很抱歉

我在 thread.html 文件中设置了 websocket:

<script>
// websocket scripts

var loc = window.location

var wsStart = 'ws://'
if(loc.protocol == 'https:'){
    wsStart = 'wss://'
}
var endpoint = wsStart + loc.host + loc.pathname
var socket = new WebSocket(endpoint)

socket.onmessage = function(e){
    console.log('message', e)
}

socket.onopen = function(e){
    console.log('open', e)
}

socket.onerror = function(e){
    console.log('error', e)
}

socket.onclose = function(e){
    console.log('close', e)
}

</script>

我的 consumers.py 文件:

import asyncio
import json
from django.contrib.auth import get_user_model
from channels.consumer import AsyncConsumer

from channels.db import database_sync_to_async

from .models import Thread, ChatMessage


class ChatConsumer(AsyncConsumer):
    async def websocket_connect(self, event):
        print('connected', event)

    async def websocket_disconnect(self, event):
        print('disconnected', event)

    async def websocket_receive(self, event):
        print('receive', event)

routing.py

from django.conf.urls import url
from channels.routing import ProtocolTypeRouter, URLRouter
from channels.auth import AuthMiddlewareStack
from channels.security.websocket import AllowedHostsOriginValidator, OriginValidator

from chat.consumers import ChatConsumer

application = ProtocolTypeRouter({
    'websocket': AllowedHostsOriginValidator(
        AuthMiddlewareStack(
            URLRouter(
                [
                    url(r"^messages/(?P<username>[\w.@+-]+)/$", ChatConsumer),
                ]
            )
        )
    )
})

当我刷新网站时,我在 firefox 控制台中收到以下错误:

Firefox 无法与位于 ws://127.0.0.1:8000/messages/user2 的服务器建立连接。

在我的终端中:

[2021/11/23 20:50:06] HTTP GET /messages/user2 200 [0.01, 127.0.0.1:52340] 2021-11-23 20:50:06,177-错误-ws_protocol-[失败实例:回溯::找不到路径'messages/user2'的路由。 /home/mephis/projects/channels-rapid/lib/python3.8/site-packages/autobahn/websocket/protocol.py:2841:processHandshake [...] /home/mephis/projects/channels-rapid/lib/python3.8/site-packages/daphne/ws_protocol.py:72:onConnect --- 此处捕获异常 --- /home/mephis/projects/channels-rapid/lib/python3.8/site-packages/twisted/internet/defer.py:191:maybeDeferred [...] [2021/11/23 20:50:11] WebSocket DISCONNECT /messages/user2 [127.0.0.1:52342]

我尝试过的事情: 对行进行硬编码

url(r"^messages/(?P[\w.@+-]+)/$", ChatConsumer),

url(r"^messages/user2/$", ChatConsumer),

只是想看看它是否会起作用 - 它没有

我也关注了这个问题的答案:django-channels: No route found for path

他们都没有给我任何结果

我使用频道 2.1.2 和 django 2.0.7

【问题讨论】:

    标签: javascript python django websocket channels


    【解决方案1】:

    我猜你在问这个问题之前没有看完整个教程。 在您的消费者中,您应该接受连接:

    class ChatConsumer(AsyncConsumer):
    async def websocket_connect(self, event):
        print('connected', event)
        await self.send({"type": "websocket.accept"})
    

    【讨论】:

      猜你喜欢
      • 2019-06-04
      • 1970-01-01
      • 2021-06-18
      • 1970-01-01
      • 2021-12-14
      • 2017-04-05
      • 1970-01-01
      • 1970-01-01
      • 2020-03-04
      相关资源
      最近更新 更多