如何通过Django通道WebSocket传递请求并调用Django视图

时间:2019-07-20 00:07:33

标签: python django websocket django-channels

我正在使用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连接?

1 个答案:

答案 0 :(得分:0)

签出this project,使您能够使用Django Rest Framework视图处理频道websocket请求。您可以尝试使其适应普通的Django视图。