【问题标题】:How to pass request over Django channels WebSocket and call Django view如何通过 Django 通道 WebSocket 传递请求并调用 Django 视图
【发布时间】:2019-11-28 22:32:20
【问题描述】:

我正在使用 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 收到的凭据对 localhost 进行 sync_to_async 调用。但是,这需要我处理会话数据并将其发送回客户端。这似乎还有很多工作。也就是说,我可以在服务器上维护会话本身,并将它们与 WebSocket 连接本身相关联。由于我使用的是安全的 WebSocket wss://,是否有可能劫持 WebSocket 连接?

【问题讨论】:

    标签: python django websocket django-channels


    【解决方案1】:

    查看this project,它提供了使用 Django Rest Framework 视图处理通道 websocket 请求的能力。您可以尝试将其调整为普通的 Django 视图。

    【讨论】:

      猜你喜欢
      • 2021-11-01
      • 2018-11-10
      • 2011-04-06
      • 1970-01-01
      • 1970-01-01
      • 2017-06-08
      • 2012-06-25
      • 2012-01-17
      • 1970-01-01
      相关资源
      最近更新 更多