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

如何在Django Channels中为不同路径配置不同WebSocket路由与认证

合并不同认证方式的WebSocket Application解决方案

完全可以将两个application合并为一个,核心思路是:为不同路径前缀的WebSocket路由组单独配置对应的认证中间件,再通过顶层URLRouter将这些带中间件的路由集合整合到同一个ProtocolTypeRouter中。

具体实现步骤

  1. 保留原有各App的WebSocket路由定义
    不用修改api和live_tracker各自的websocket路由文件,比如:

    • api/routing.py里的websocket_urlpatterns(对应需要Token认证的路由)
    • live_tracker/routing.py里的live_websocket_urlpatterns(对应默认认证的路由)
  2. 为每个路由组绑定对应认证中间件
    在项目根目录的routing.py中,导入所需模块并为每个路由组套上对应的中间件:

    from channels.routing import ProtocolTypeRouter, URLRouter
    from channels.auth import AuthMiddlewareStack
    from django.urls import path
    
    # 导入各App的websocket路由
    from api.routing import websocket_urlpatterns as api_ws_urls
    from live_tracker.routing import live_websocket_urlpatterns as tracker_ws_urls
    # 导入你的自定义Token认证中间件
    from api.middleware import TokenAuthMiddleware
    

    接着为不同路由组生成带认证的路由实例:

    # 给API的WebSocket路由套自定义Token认证中间件
    api_auth_ws_router = TokenAuthMiddleware(URLRouter(api_ws_urls))
    
    # 给Live Tracker的路由套默认认证中间件栈
    tracker_auth_ws_router = AuthMiddlewareStack(URLRouter(tracker_ws_urls))
    
  3. 合并为单一顶层Application
    用ProtocolTypeRouter和顶层URLRouter将两个带认证的路由整合:

    application = ProtocolTypeRouter({
        "websocket": URLRouter([
            # 匹配/api/前缀的WebSocket请求,使用Token认证
            path("api/", api_auth_ws_router),
            # 匹配/live-tracker/前缀的请求,使用默认认证
            path("live-tracker/", tracker_auth_ws_router),
        ]),
        # 如需处理HTTP协议,可在此添加对应的路由配置
        # "http": django_asgi_app,
    })
    

关键注意事项

  • 路径前缀配合:各App内部的WebSocket路由不要包含外层的前缀(比如api的路由里写path("ws/messages/", MessageConsumer.as_asgi()),完整请求路径就是/api/ws/messages/)
  • 中间件规范:确保自定义的TokenAuthMiddleware符合Channels中间件要求——能正确接收scope和receive参数,并将处理后的scope传递给内层的路由应用
  • 避免重复定义:删除之前分开的多个application定义,只用这个合并后的顶层application即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 21:13:14