亚洲免费在线视频-亚洲啊v-久久免费精品视频-国产精品va-看片地址-成人在线视频网

您的位置:首頁技術文章
文章詳情頁

淺談django channels 路由誤導

瀏覽:147日期:2024-09-30 13:37:39

與django路由有區別

他們都有根路由,但是不一樣。

django的根路由:

urlpatterns = [ path(’login/’,include(’login.urls’)), path(’’,views.home), path(’helloapp/’, include(’helloapp.urls’)), path(’admin/’, admin.site.urls),]

channels的根路由:

只能形如這種樣子,URLRouter里面是一個列表,列表當中是具體路由條目。

application = ProtocolTypeRouter({ # (http->django views is added by default) ’websocket’: AuthMiddlewareStack( URLRouter([ re_path(r’ws/chat/(?P<room_name>w+)/$’, consumers.ChatConsumer), #path(’’, consumers.rtcConsumer),]) ),})

有人說為什么不能這樣呢?

application = ProtocolTypeRouter({ # (http->django views is added by default) ’websocket’: AuthMiddlewareStack( URLRouter( chat.routing.websocket_urlpatterns ) ),})

問得好,的確可以,這也是文檔的寫法,替換一下是一樣的。根路由指向chat這個APP的路由條目,而chat.routing.websocket_urlpatterns就等于:

[re_path(r’ws/chat/(?P<room_name>w+)/$’, consumers.ChatConsumer), path(’’, consumers.rtcConsumer),]

那么,假如我有兩個APP(webrtc和chat)需要用到websocket,那么我很自然的想到在兩個APP中分別新建routing.py路由文件,然后將根路由寫成這樣:

application = ProtocolTypeRouter({ # (http->django views is added by default) ’websocket’: AuthMiddlewareStack( URLRouter( webrtc.routing.websocket_urlpatterns, chat.routing.websocket_urlpatterns, ) ),})

很遺憾,報錯參數過多。加個列表:

application = ProtocolTypeRouter({ # (http->django views is added by default) ’websocket’: AuthMiddlewareStack( URLRouter([ webrtc.routing.websocket_urlpatterns, chat.routing.websocket_urlpatterns, ]) ),})

依然錯誤。我甚至將兩個路由的list合成一個list才沒問題:

routinglist=[]routinglist.extend(chat.routing.websocket_urlpatterns)routinglist.extend(webrtc.routing.websocket_urlpatterns)application = ProtocolTypeRouter({ # (http->django views is added by default) ’websocket’: AuthMiddlewareStack( URLRouter( routinglist ) ),})

請問,根路由的作用究竟在哪?這個根路由的作用在于不僅僅只有websocket,還有一些其他的服務,看到上面代碼的逗號就明白了。但是如果只用websocket,這個根路由沒意義,因為它只能指向一個routing.py.

文檔的誤導

文檔讓我們一步一步實現一個簡單的聊天室,他將routing.py寫在chat這個APP的目錄下,如果我除了chat這個APP需要用到websocket,那么其他APP的路由也得寫到chat里面的routing.py。因此,我為什么要將routing.py放在chat里面呢,它又不是chat專屬。

更一般的形式

所以我建議,別學文檔例子,將routing.py文件放在任何APP之下,而應該放在工程目錄下(與APP同目錄)創建一個文件夾如consumer,在里面創建routing.py和消費者。

channels文檔真不細致,怪不得用的人少,網上一點有用的資料沒有

找到文檔的websocket消費者,就這么一點?

淺談django channels 路由誤導

而在源碼中有這么多:

def websocket_connect(self, message) def connect(self) def accept(self, subprotocol=None) def websocket_receive(self, message) def receive(self, text_data=None, bytes_data=None) def send(self, text_data=None, bytes_data=None, close=False) def close(self, code=None) def websocket_disconnect(self, message) def disconnect(self, code)

看過一句話

django使用websocket最好的辦法是用tornado做websocket服務器

到此這篇關于淺談django channels 路由誤導的文章就介紹到這了,更多相關django channels 路由內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Django
相關文章:
主站蜘蛛池模板: 国产精品手机在线观看 | 台湾三级香港三级经典三在线 | 国产黄色一级网站 | 日韩精品一区二区三区乱码 | 日韩免费一区二区三区 | 俄罗斯一级黄色片 | 日韩一级在线播放免费观看 | 亚洲成人免费观看 | 国产在线观看免费 | 黄网站在线播放视频免费观看 | 99精彩免费观看 | 久久在线免费视频 | 国产精品九九 | 国产在线步兵一区二区三区 | 特黄女一级毛片 | 精品欧美亚洲韩国日本久久 | 亚洲国产在| 欧美成人h版在线观看 | 高清色黄毛片一级毛片 | 最新国产精品好看的国产精品 | 久久久久久久久久免免费精品 | 日本加勒比一区 | 高清国产亚洲va精品 | 日韩精品在线免费观看 | 日本一级特黄大一片免 | 2022麻豆福利午夜久久 | 国产三级国产精品国产普男人 | 亚洲一级在线 | 一级毛片成人免费看免费不卡 | 成人小视频在线观看免费 | 久久久精品久久视频只有精品 | 国产成人精品久久亚洲高清不卡 | 国产91av在线 | 男女猛烈无遮掩免费视频 | 免费鲁丝片一级观看 | 中文字幕在线观看网址 | 视频偷拍一级视频在线观看 | 深爱激情五月网 | 国产青草| 香蕉超级碰碰碰97视频在线观看 | 国产亚洲精品高清在线 |