Django WebSocket路径找不到求助:React+Django连接失败
解决Django + React WebSocket 404错误的方案
核心问题排查与修复
1. 项目名称不匹配导致ASGI配置失效
你的asgi.py和settings.py存在项目名称不一致的问题:
asgi.py中设置的DJANGO_SETTINGS_MODULE为myproject_project.settingssettings.py中ASGI_APPLICATION配置为agonet_project.asgi.application
这种不一致会导致Django无法正确加载ASGI路由配置,必须统一项目名称:
如果你的项目实际名称是agonet_project,修改asgi.py中的对应行:
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'agonet_project.settings')
2. 使用ASGI服务器启动项目
Django自带的python manage.py runserver是WSGI服务器,不支持WebSocket协议。必须切换到ASGI服务器启动项目:
- 安装daphne:
pip install daphne - 用daphne启动项目:
或使用uvicorn:daphne agonet_project.asgi:applicationpip install uvicorn uvicorn agonet_project.asgi:application
3. 修复前端WebSocket代码错误
前端代码中的ws.setRequestHeader('Host', window.location.host);是错误的——WebSocket API没有setRequestHeader方法,这会引发前端报错,虽不是404的直接原因,但会影响连接逻辑。删除该行即可:
const ws = new WebSocket('ws://127.0.0.1:8000/ws/flow/'); ws.onopen = () => { console.log('WebSocket connection opened.'); ws.send(JSON.stringify({ message: 'Hello, server!' })); }; ws.onmessage = (event) => { const message = JSON.parse(event.data); console.log('Received message:', message); }; ws.onclose = () => { console.log('WebSocket connection closed.'); }; export default ws;
4. 验证路由配置
当前flow/routing.py的路由配置是正确的,修改完上述配置并启动ASGI服务器后,重新测试WebSocket连接即可。
内容的提问来源于stack exchange,提问作者Marco
相关产品推荐
相关产品推荐

