You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django Channels报错:/ws/notification/ 404未找到,求排查解决

Django WebSocket实时通知系统404错误排查与解决

核心原因分析

出现Not Found: /ws/notification/错误,说明WebSocket请求未被ASGI服务器正确路由处理,以下是针对性排查和修复步骤:

1. 未使用ASGI兼容服务器运行项目

Django默认runserver是WSGI服务器,不支持WebSocket协议,必须用ASGI服务器启动项目:

  • 安装daphne(Channels官方推荐的ASGI服务器):
pip install daphne
  • 用daphne启动项目:
daphne reviewproject.asgi:application

或使用Channels提供的ASGI版本runserver:

python manage.py runserver --asgi

2. WebSocket路由正则未正确锚定

notification/routing.py中的正则表达式缺少开头锚点^,导致路由匹配逻辑异常:
修改routing.py:

from django.urls import re_path
from . import consumers

websocket_urlpattern = [
    re_path(r'^ws/notification/$', consumers.NotificationConsumer.as_asgi()),
]

添加^确保只匹配以/ws/notification/开头且结尾的路径。

3. ASGI配置文件路径或引用错误

确认settings.py中的ASGI_APPLICATION配置与实际文件路径一致:

ASGI_APPLICATION = "reviewproject.asgi.application"

同时检查asgi.py中是否正确导入WebSocket路由:

import notification.routing

# 确保URLRouter引用的是正确的变量名
URLRouter(
    notification.routing.websocket_urlpattern
)

注意变量名是websocket_urlpattern(单数),如果routing.py中是复数websocket_urlpatterns需同步修改。

4. 避免HTTP路由与WebSocket路由冲突

检查项目根urls.py中是否存在匹配/ws/notification/的HTTP路由,若有需删除或修改,防止WebSocket请求被HTTP路由拦截处理。

额外优化提示

  • consumer.py中group_discard方法不存在,Channels正确的移除组方法是group_remove,修改代码:
async def disconnect(self):
    await self.channel_layer.group_remove(self.group_name, self.channel_name)

内容的提问来源于stack exchange,提问作者Yasumi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 14:10:56