【问题标题】:Websockets, React + DjangoWebsockets,反应 + Django
【发布时间】:2022-09-30 16:21:48
【问题描述】:
我很好奇是否有关于使用 Websockets、React 和 Django 的明确答案。
从我读过的内容来看 (1) 将 React 与 Django 链接的首选方法是使用 Django Rest Framework (DRF)。(2) 在 Django 中利用 websockets 的首选方法似乎是通过 Django Channels。 (3) 在 React 中使用 websockets 的首选方式是通过 Socket.io。
因此,将这三者联系起来似乎相当困难。我看到了两种可能的解决方案,它们都可能无效。
- React 使用 Socket.io 并通过 DRF 与后端进行通信。
- React 是通过 Django 模板呈现的,而 websocket 是通过 Channels 来利用的。
我想#2 是更令人头疼的路径,因为 Django 是非常固执己见的框架。
关于 Websockets、React 和 Django 应该如何一起使用,是否有明确的答案? (This question 几乎没有任何吸引力。)
编辑不太喜欢的选项 3:对大多数应用程序使用 React、Node 和 Express,包括 websockets 和 DRF,仅用于 python 真正闪耀的东西(例如 ML 管道。)
标签:
reactjs
django
websocket
【解决方案1】:
使用 websockets、React 和 Django 没有明确的答案(我认为不应该)。这些是不同的技术,尽管它们可以很好地连接起来。如何连接它们取决于您。最好的方法是使用它们以最简单的整体架构来实现您的项目要求。
前段时间我创建了一个示例项目,它正在使用:
- Django 用于后端(Django Rest Framework、Django Channels 和 Celery),
- React for frontend(使用
ws与REST API和WebSockets通信)
该项目在 GitHub 上可用:https://github.com/pplonski/simple-tasks
该项目使用docker-compose(docker-compose.yml 文件)部署,并具有以下组件:
- nginx 服务于 React
- wsgiserver 服务于 REST API
- wsgi 服务器服务 websockets
- 用于 Celery 的rabbitmq & redis
- 芹菜的工人和听众
该项目正在做两个数字和睡眠的简单相加。该任务是在 Celery 的后台计算的,我使用 websockets 进行有关进度的实时通信(每 1 秒睡眠更新被发送到客户端)。
React+Django 是我的首选堆栈,因为我从事许多数据科学/机器学习项目。