Websockets, React + Django

Мне интересно, есть ли окончательный ответ по использованию Websockets, React и Django.

Из того, что я прочитал (1) предпочтительный способ связать React с Django - использовать Django Rest Framework (DRF.) (2) Предпочтительный способ использовать websockets в Django, похоже, через Django Channels. (3) А предпочтительный способ использования сокетов в React - это Socket.io.

Итак, кажется, что связать все три варианта довольно сложно. Я вижу два возможных решения, которые оба могут быть правильными.

  1. React uses Socket.io and passes communicates w/ the backend via DRF.
  2. React is rendered through a Django template and websockets are leveraged via Channels.

Я представляю, что #2 - это путь с большим количеством головных болей, так как Django - это фреймворк с большим количеством мнений.

Есть ли окончательный ответ на вопрос о том, как следует использовать Websockets, React и Django вместе? ( Этот вопрос практически не получил отклика.)

Редактировать Менее предпочтительный вариант 3: использовать React, Node & Express для большей части приложения, включая websockets и DRF исключительно для вещей, в которых python действительно сияет (например, конвейеры ML)

Нет однозначного ответа (и я думаю, что его и не должно быть) по поводу использования вебсокет, React и Django. Это разные технологии, хотя они могут быть хорошо связаны между собой. Как их соединить - решать вам. Лучший подход - использовать их для достижения требований вашего проекта с наиболее простой общей архитектурой.

Некоторое время назад я создал пример проекта, который использовал:

  • Django для backend (Django Rest Framework, Django Channels и Celery),
  • React для фронтенда (взаимодействие с REST API и WebSockets с помощью ws)

Проект доступен на GitHub: https://github.com/pplonski/simple-tasks

Проект был развернут с помощью docker-compose (docker-compose.yml файл) и имеет следующие компоненты:

  • nginx, обслуживающий React
  • wsgiserver, обслуживающий REST API
  • asgiserver обслуживает websocekts
  • rabbitmq & redis для Celery
  • worker & listeners для Celery

Проект заключался в выполнении простой суммы двух чисел и сна. Задача вычислялась в фоновом режиме с помощью Celery, и я использовал websockets для живого общения о прогрессе (каждые 1 секунду сна обновление отправлялось клиенту).

Стек React+Django - мой предпочтительный стек, потому что я работаю над многими проектами Data Science/Machine Learning.

Вернуться на верх