Django-channels: не найден маршрут для пути
Я следовал этому руководству по django-channels: https://youtu.be/RVH05S1qab8
Я следовал каждому шагу, указанному в видео, сначала, когда я столкнулся с проблемой, я перепросмотрел его и проследил еще раз, чтобы убедиться, что я все сделал правильно, но это было не так.
Я довольно новичок в django, поэтому извините, если мои объяснения неточны
я настроил вебсокет в файле thread.html:
<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 - ERROR - ws_protocol - [Failure instance: Traceback: <class 'ValueError'>: Не найден маршрут для пути '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),
to
url(r"^messages/user2/$", ChatConsumer),
просто чтобы посмотреть, сработает ли это - не сработало
я также следил за ответами на этот вопрос: django-channels: Не найден маршрут для пути
и ни один из них не принес мне никаких результатов
я использую каналы 2.1.2 и django 2.0.7