簡體   English   中英

如何通過Django通道WebSocket傳遞請求並調用Django視圖

[英]How to pass request over Django channels WebSocket and call Django view

我正在使用Django處理單頁應用程序,並且想使用WebSockets,因此要使用Channels。 為簡單起見,我想我想僅通過WebSocket處理所有服務器通信,而不是在混合中添加XHR(XML HTTP請求)。 我從一開始就使用通道,因為會有很多數據從服務器異步推送到客戶端。

對於常規Django,通常會向https://example.com/loginhttps://example.com/logout或其他內容發出請求,而Django URL路由器將決定將其發送到哪個視圖。 相反,我希望用戶在客戶端中執行其操作,使用Javascript處理它,並使用WebSocket將請求發送到服務器。 由於我使用的是Django-allauth,因此我想使用提供的Django視圖來處理身份驗證之類的事情。 然后,服務器將使用視圖中的必要狀態信息更新客戶端。

我的問題 :如何處理通過WebSocket接收的數據並將HTTP請求提交到Django視圖? 然后,我的頻道使用者將獲取呈現的HTML,並將其發送回客戶端以更新頁面或部分。

我可以想象使用XHR會發生什么,但是我試圖避免將兩者混為一談,除非有人能指出使用XHR和WebSockets的有用性……? 我想另一個選擇是使用XHR進行身份驗證和其他客戶端發起的請求,並使用WebSocket異步更新客戶端。 這一點有意義嗎?

更新 :在我看來,我可以使用來自PyPi的requests ,並使用通過WebSocket收到的憑據對本地主機進行sync_to_async調用。 但是,這將需要我處理會話數據並將其發送回客戶端。 這似乎需要做很多工作。 也就是說,我可以將會話本身保留在服務器上,而只需將它們與WebSocket連接本身相關聯即可。 由於我使用的是安全的WebSocket wss://是否有可能劫持WebSocket連接?

簽出此項目該項目使您能夠使用Django Rest Framework視圖處理Channels Websocket請求。 您可以嘗試使其適應普通的Django視圖。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM