国产成人精品亚洲777人妖,欧美日韩精品一区视频,最新亚洲国产,国产乱码精品一区二区亚洲

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

淺談django channels 路由誤導(dǎo)

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

與django路由有區(qū)別

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

django的根路由:

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

channels的根路由:

只能形如這種樣子,URLRouter里面是一個(gè)列表,列表當(dāng)中是具體路由條目。

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),]) ),})

有人說(shuō)為什么不能這樣呢?

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

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

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

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

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

很遺憾,報(bào)錯(cuò)參數(shù)過(guò)多。加個(gè)列表:

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

依然錯(cuò)誤。我甚至將兩個(gè)路由的list合成一個(gè)list才沒(méi)問(wèn)題:

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 ) ),})

請(qǐng)問(wèn),根路由的作用究竟在哪?這個(gè)根路由的作用在于不僅僅只有websocket,還有一些其他的服務(wù),看到上面代碼的逗號(hào)就明白了。但是如果只用websocket,這個(gè)根路由沒(méi)意義,因?yàn)樗荒苤赶蛞粋€(gè)routing.py.

文檔的誤導(dǎo)

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

更一般的形式

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

channels文檔真不細(xì)致,怪不得用的人少,網(wǎng)上一點(diǎn)有用的資料沒(méi)有

找到文檔的websocket消費(fèi)者,就這么一點(diǎn)?

淺談django channels 路由誤導(dǎo)

而在源碼中有這么多:

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)

看過(guò)一句話

django使用websocket最好的辦法是用tornado做websocket服務(wù)器

到此這篇關(guān)于淺談django channels 路由誤導(dǎo)的文章就介紹到這了,更多相關(guān)django channels 路由內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Django
相關(guān)文章:
主站蜘蛛池模板: 河池市| 舞钢市| 利津县| 黄山市| 吉隆县| 儋州市| 景泰县| 全南县| 松阳县| 扶风县| 泾川县| 靖边县| 洮南市| 娄烦县| 马龙县| 察雅县| 大竹县| 清流县| 外汇| 南安市| 城口县| 盱眙县| 顺义区| 交口县| 德江县| 溧水县| 宾川县| 霍城县| 巫溪县| 忻城县| 苏州市| 和平县| 那坡县| 长顺县| 阜城县| 习水县| 梁山县| 涟源市| 建平县| 东辽县| 南开区|