最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2020年05月28日 16:39:21   作者:我是注釋  
這篇文章主要介紹了淺談django channels 路由誤導(dǎo),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

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

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

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

問得好,的確可以,這也是文檔的寫法,替換一下是一樣的。根路由指向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ù)過多。
加個(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才沒問題:

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)問,根路由的作用究竟在哪?這個(gè)根路由的作用在于不僅僅只有websocket,還有一些其他的服務(wù),看到上面代碼的逗號(hào)就明白了。
但是如果只用websocket,這個(gè)根路由沒意義,因?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)有用的資料沒有

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


而在源碼中有這么多:

 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服務(wù)器

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

相關(guān)文章

  • python中圖形庫(kù)turtle庫(kù)詳解(適用于計(jì)算機(jī)二級(jí))

    python中圖形庫(kù)turtle庫(kù)詳解(適用于計(jì)算機(jī)二級(jí))

    Turtle庫(kù)是Python語(yǔ)言中的一個(gè)圖形庫(kù),可以用來(lái)繪制各種形狀,如線條、矩形、圓形等等,下面這篇文章主要給大家介紹了關(guān)于python中圖形庫(kù)turtle庫(kù)的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-08-08
  • 一文搞懂關(guān)于?sys.argv?的詳解

    一文搞懂關(guān)于?sys.argv?的詳解

    sys.argv?其實(shí)就是一個(gè)列表,里邊需要用戶傳入的參數(shù),關(guān)鍵就是要明白這參數(shù)是從程序外部輸入的,而非代碼本身的什么地方,要想看到它的效果就應(yīng)該將程序保存了,從外部來(lái)運(yùn)行程序并給出參數(shù),通過本文學(xué)習(xí)你將明白?sys.argv很多知識(shí),感興趣的朋友一起看看吧
    2023-01-01
  • 如何解決jupyter?notebook中文亂碼問題

    如何解決jupyter?notebook中文亂碼問題

    這篇文章主要介紹了如何解決jupyter?notebook中文亂碼問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • python生成不重復(fù)隨機(jī)數(shù)和對(duì)list亂序的解決方法

    python生成不重復(fù)隨機(jī)數(shù)和對(duì)list亂序的解決方法

    下面小編就為大家分享一篇python生成不重復(fù)隨機(jī)數(shù)和對(duì)list亂序的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2018-04-04
  • Python 中 -m 的典型用法、原理解析與發(fā)展演變

    Python 中 -m 的典型用法、原理解析與發(fā)展演變

    這篇文章主要介紹了Python 中 -m 的典型用法、原理解析與發(fā)展演變,需要的朋友可以參考下
    2019-11-11
  • Python函數(shù)式編程藝術(shù)之修飾器運(yùn)用場(chǎng)景探索

    Python函數(shù)式編程藝術(shù)之修飾器運(yùn)用場(chǎng)景探索

    本文將詳細(xì)介紹Python修飾器的概念,提供詳細(xì)的示例,并介紹如何使用它們來(lái)優(yōu)化和擴(kuò)展代碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • 如何基于Python爬蟲爬取美團(tuán)酒店信息

    如何基于Python爬蟲爬取美團(tuán)酒店信息

    這篇文章主要介紹了如何基于Python爬蟲爬取美團(tuán)酒店信息,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • 詳解pycharm連接不上mysql數(shù)據(jù)庫(kù)的解決辦法

    詳解pycharm連接不上mysql數(shù)據(jù)庫(kù)的解決辦法

    這篇文章主要介紹了詳解pycharm連接不上mysql數(shù)據(jù)庫(kù)的解決辦法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • python繪制柱形圖的方法

    python繪制柱形圖的方法

    這篇文章主要為大家詳細(xì)介紹了python繪制柱形圖的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • 淺談Python中(&,|)和(and,or)之間的區(qū)別

    淺談Python中(&,|)和(and,or)之間的區(qū)別

    這篇文章主要介紹了淺談Python中(&,|)和(and,or)之間的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08

最新評(píng)論

剑川县| 乌审旗| 贵州省| 攀枝花市| 平南县| 谢通门县| 宁远县| 林西县| 将乐县| 梁山县| 鹤庆县| 得荣县| 天全县| 永安市| 花莲市| 滦南县| 景泰县| 昌吉市| 正安县| 抚松县| 松滋市| 汪清县| 焦作市| 石楼县| 贺州市| 萝北县| 沁阳市| 西华县| 保山市| 加查县| 石家庄市| 隆子县| 宕昌县| 鄂尔多斯市| 西乌| 瑞丽市| 大埔县| 库伦旗| 阿城市| 景东| 大荔县|