激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

腳本之家,腳本語言編程技術(shù)及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - 淺談django channels 路由誤導

淺談django channels 路由誤導

2020-05-29 11:12我是注釋 Python

這篇文章主要介紹了淺談django channels 路由誤導,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

與django路由有區(qū)別

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

django的根路由:

?
1
2
3
4
5
6
urlpatterns = [
  path('login/',include('login.urls')),
  path('',views.home),
  path('helloapp/', include('helloapp.urls')),
  path('admin/', admin.site.urls),
]

channels的根路由:

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

?
1
2
3
4
5
6
7
8
9
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),
        ])
  ),
})

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

?
1
2
3
4
5
6
7
8
application = ProtocolTypeRouter({
  # (http->django views is added by default)
  'websocket': AuthMiddlewareStack(
    URLRouter(
      chat.routing.websocket_urlpatterns
    )
  ),
})

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

?
1
2
3
[re_path(r'ws/chat/(?P<room_name>\w+)/$', consumers.ChatConsumer),
 path('', consumers.rtcConsumer),
]

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

?
1
2
3
4
5
6
7
8
9
application = ProtocolTypeRouter({
  # (http->django views is added by default)
  'websocket': AuthMiddlewareStack(
    URLRouter(
      webrtc.routing.websocket_urlpatterns,
      chat.routing.websocket_urlpatterns,
    )
  ),
})

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

?
1
2
3
4
5
6
7
8
9
application = ProtocolTypeRouter({
  # (http->django views is added by default)
  'websocket': AuthMiddlewareStack(
    URLRouter([
      webrtc.routing.websocket_urlpatterns,
      chat.routing.websocket_urlpatterns,
    ])
  ),
})

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

?
1
2
3
4
5
6
7
8
9
10
11
12
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.

文檔的誤導

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

更一般的形式

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

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

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

淺談django channels 路由誤導

而在源碼中有這么多:

?
1
2
3
4
5
6
7
8
9
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服務器

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

原文鏈接:https://blog.csdn.net/weixin_43159092/article/details/106380481

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 逼片| 亚洲91精品| 精品在线视频播放 | 成人免费毛片片v | 午夜亚洲影院 | 久久久久久片 | 久综合| 日韩av在线影院 | 欧美1 | 亚洲骚图 | 污黄视频在线播放 | 日日夜av | 午夜天堂在线 | 亚洲伊人色欲综合网 | 日韩毛片一区二区三区 | 国产精品91久久久 | 亚洲第五色综合网 | chinese 军人 gay xx 呻吟 | 亚洲黑人在线观看 | 92看片淫黄大片欧美看国产片 | 天天夜干 | 91精品国产福利尤物免费 | 4p嗯啊巨肉寝室调教男男视频 | 国产午夜精品在线 | 日本a大片 | 超级av在线 | 九色新网址| 久久久久久久久久综合 | 久久久久二区 | 成人偷拍片视频在线观看 | 欧美日韩在线视频一区 | 亚洲成人伊人 | 91av在线免费 | 99久久精品免费看国产小宝寻花 | 看国产精品 | 亚洲小视频在线观看,com | 久久精品视频12 | av不卡毛片 | 欧美一级高潮 | 欧美日韩国产精品 | 最新亚洲国产 |