【发布时间】: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-[失败实例:回溯:
我尝试过的事情: 对行进行硬编码
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