Django URL模式多余空格致Flutter与后端WebSocket握手失败
问题修复方案
问题根源
你在项目根urls.py中使用path来包含由re_path定义的WebSocket正则路由列表,两种路由类型混用导致拼接时出现异常空格,进而引发404错误。
修复方法(二选一即可)
方法一:将根路由的path改为re_path
修改项目根目录下的urls.py:
from django.contrib import admin from django.urls import include, path, re_path # 新增re_path导入 from chat_app.routing import websocket_urlpatterns urlpatterns = [ path('admin/', admin.site.urls), ..., re_path(r'ws/', include(websocket_urlpatterns)), # 替换path为re_path ]
方法二:将WebSocket路由改为path格式
修改chat_app/routing.py,把正则路由替换为Django的路径转换器格式:
from django.urls import path # 替换re_path为path from .consumers import ChatConsumer websocket_urlpatterns = [ path('chat_app/<str:unique_id>/', ChatConsumer.as_asgi()), ]
此方法下,根urls.py中的path('ws/', include(websocket_urlpatterns))无需修改。
验证
修改完成后,重新启动Django服务,访问/ws/chat_app/sjfAmH(或对应的WebSocket端点),即可正常匹配路由,不再返回404错误。
内容的提问来源于stack exchange,提问作者Geo48
相关产品推荐
相关产品推荐

