python - 如何通过 Django 通道 WebSocket 传递请求并调用 Django 视图
问题描述
我正在使用 Django 开发单页应用程序,并且想使用 WebSockets,因此也想使用 Channels。为了简单起见,我想我想单独通过 WebSocket 处理所有服务器通信,而不是将 XHR(XML HTTP 请求)添加到混合中。我从一开始就使用通道,因为会有很多数据从服务器异步推送到客户端。
使用常规 Django,对https://example.com/login或https://example.com/logout或其他任何内容的常规请求和 Django URL 路由器将决定将其发送到哪个视图。相反,我想让用户在客户端执行他们的操作,用 Javascript 处理它,然后使用 WebSocket 将请求发送到服务器。由于我使用的是 Django-allauth,我想使用提供的 Django 视图来处理身份验证等事情。然后,服务器将使用视图中的必要状态信息更新客户端。
我的问题:如何处理通过 WebSocket 接收的数据并将 HTTP 请求提交到 Django 视图?然后,我的频道消费者将获取呈现的 HTML 并将其发送回客户端以更新页面或部分。
我可以想象使用 XHR 会发生什么,但我试图避免将两者混为一谈,除非有人能指出使用 XHR 和 WebSockets 的用处......?我想另一种选择是使用 XHR 进行身份验证和其他客户端发起的请求,并使用 WebSocket 异步更新客户端。这有任何意义吗?
更新:我突然想到我可以requests
从 PyPi 使用,并sync_to_async
使用我通过 WebSocket 收到的凭据调用 localhost。但是,这需要我处理会话数据并将其发送回客户端。这似乎还有很多工作。也就是说,我可以在服务器上维护会话本身,并将它们与 WebSocket 连接本身相关联。由于我使用的是安全的 WebSocket wss://
,是否有可能劫持 WebSocket 连接?
解决方案
查看这个项目,它提供了使用 Django Rest Framework 视图处理通道 websocket 请求的能力。您可以尝试将其调整为普通的 Django 视图。
推荐阅读
- flutter - 使用 Cloud Functions Flutter 对 Firebase 实时数据库执行查询
- mysql - 在一次查询中使用外键数据更新和删除表
- python - 从 Django 中的 POST 请求中获取价值
- c - 检测内存损坏
- php - Phalcon4 模型分页
- java - 如何在java中水平组合两个不同维度的二维数组
- rundeck - Rundeck ACL 隐藏定义
- javascript - 下载前水平翻转图像
- kubernetes - Kubernetes:从本地端口(UDP、TCP)到特定服务的流量转发
- flutter - dio http get error ArgumentError (Invalid argument(s) (input): Must not be null) flutter