В этой статье, я покажу тебе, как интегрировать React в Django проект. Идея такой интеграции заключается в том, чтобы дать Джанге отрендерить свои шаблоны, чтобы после этого наше Реакт приложение перехватило отрендеренную страницу и модифицировало её.
Если ты хочешь пропустить базовую установку и настройку, переходи сразу к установке Реакта. Так же ты можешь установить уже готовый базовый проект для этой главы. Если хочешь.
Создание Django проекта
Мы начнём с создания главной директории:
Теперь создадим и активируем виртуальное окружение, если для windows то:
Если для linux, то:
После активации окружения, установим сам django и начнём новый проект. Назовём его Website.
Если всё сделано верно, мы сможем запустить наш базовый проект и убедиться в этом. Вот так:
Создание Backend приложения
Теперь нужно установить парочку новых питоновских пакета, для корректной работы с API нашего сайта. Вот эти пакеты
django-cors-headers: для активации так называемого Cross-Origin Resource Sharing (CORS) для общения React приложения и Django API.
djangorestframework: это Django приложение, которое позволит нам с лёгкостью построить АПИ для нашего сайта.
Установим их и создадим наше первое приложение:
Отредактируй settings.py файл в своём любимом редакторе. В моём случае это будет NeoVim. Теперь подключим приложение Backend к нашему проекту.
Создай файл urls.py, для linux:
Для windows:
Вставь следующий контент в urls.py . Он находится в папке Website:
Мы импортировали роутеры для REST фреймворка и представления из ранее созданного приложения Backend, а потом подключили. А сейчас создадим временную модель, В файле Backend/models.py вставь:
Подключим нашу временную модель к админке django, в файле Backend/admin.py вставь:
Чтобы REST фреймворк работал, ему нужен сериализатор для модели. Он конвертирует django модели в JSON файлы и в таком виде отправляет через запросы. Открой(Создай) файл Backend/serializers.py и вставь следующее содержимое:
Последнее, что нам осталось сделать, так это сделать класс-представление для нашей временной модели, BackendModel. Открой файл Backend/views.py и добавь следующий код:
Создаём миграции, применяем их, а так же создадим суперпользователя. Он в будущем пригодится:
Создание Frontend приложения
Настало время для создания Frontend приложения. Это приложение и будет содержать наше react приложение. Но сначала нужно создать django приложение, настроить и подключить его. Всё, как всегда:
В файле settings.py подключим его:
А в файле Frontend/urls.py подключим представления:
Которое создадим в Frontend/views.py:
Теперь создадим шаблон по указанному адресу. И директории тоже:
Теперь подключим созданный ранее urls.py файл в Website/urls.py
Установка и настройка React
Настало время установить React. Не переживай, это просто если ты знаешь что нужно устанавливать) Зайдём в Frontend приложение и создадим несколько статических директорий там:
На данном шаге настройка и подготовка Frontend приложения Django завершена, перейдём к установке необходимых пакетов для react. Я надеюсь npm уже установлен?
Устанавливай пакеты один за другим. Нам необходимы следующие пакеты:
webpack для объединения всего нашего JS кода
babel для перевода наших JS и CSS файлов в специфичный для каждого отдельного браузера.
react для разработки фронтенда
После установки необходимых пакетов нужно настроить Babel. Создай файл настройки; назови его babel.config.json. И вставь следующий конфигурационный код:
Теперь настроим webpack пакет, но сначала создадим настроечный файл. Назови этот файл webpack.config.js. И вставь следующий конфигурационный код:
Теперь, немного пошаманим в файле package.json. Если быть конкретней, то мы добавим два скрипта для управления работой npm:
Создавая первый react компонент
После того как мы всё настроили давай напишем немного react кода. В папке Frontend/src, создай файл index.js, а в папке Frontend/src/components, создай файл App.js. Теперь вставим временный код в созданный файл src/components/App.js:
Подключим созданный компонент в src/index.js:
И в конце концов, вставим код для нашего шаблонного файла templates/Frontend/app.html:
Теперь всё настроено. Давай проверим работает ли? Запустим сервер django и сервер webpack через ранее созданный скрипт:
Если всё сделано правильно, ты увидишь что-то вроде этого
Заключение
Всё начинается с того что Django отрисовывает шаблон. После чего React перехватывает эту страницу, находит элемент по id “app” и отрисовывает наш h1 тег. Теперь мы имеем готовый фулстек приложение готовое чтобы его доделали (❁´◡`❁)
Если ты пропустил всё что было выше и хочешь просто готовое-к-использованию решение, то ты можешь скачать его здесь. Это архив с настроенной структурой директорий и готовыми зависимостями. Всё что тебе остаётся сделать, так это скачать, создать виртуальное окружение, установить все необходимые python и npm пакеты.
В следующей статье, я покажу базовую раскладку и интерфейс для нашего проекта. И как её сделать при помощи реакта.
Общие ошибки, баги и недоразумения
Неправильная структура проекта
Ошибка: Неправильная организация каталога проекта, что приводит к путанице и трудностям в управлении кодовыми базами React и Django.
Решение: Поддерживайте четкую и логичную структуру каталогов. Храните код для фронтенда и бэкенда в отдельных каталогах.
Игнорирование проблем CORS
Ошибка: Игнорирование настроек Cross-Origin Resource Sharing (CORS), что может привести к блокировке запросов.
Решение: Настройте проект Django для обработки CORS. Используйте django-cors-headers, чтобы разрешить определенные источники запросов.
Непоследовательная конфигурация среды
Ошибка: Наличие конфликтующих или непоследовательных конфигураций среды, что приводит к проблемам в сборках разработки и производства.
Решение: Убедитесь, что переменные среды определены последовательно. Используйте такие инструменты, как dotenv , для управления переменными среды как в React, так и в Django.
Неправильная обработка статических файлов
Ошибка: Неправильная настройка обработки статических файлов, что может привести к проблемам при обслуживании ресурсов React в Django.
Решение: Правильно настройте Django для обслуживания статических файлов и убедитесь, что ресурсы React размещены в каталоге, который Django может обслуживать
Игнорирование конфликтов маршрутизации на стороне клиента
Ошибка: Игнорирование потенциальных конфликтов между механизмами маршрутизации Django и React Router, что приводит к неработоспособным ссылкам или неправильной маршрутизации.
Решение: Делегируйте клиентскую маршрутизацию React Router и убедитесь, что Django обслуживает приложение React для всех соответствующих маршрутов.