Как создать веб-приложение с использованием Django и React: пошаговое руководство

Что такое Django и зачем он нужен для веб-разработки

Django — это высокоуровневый Python веб-фреймворк, который поощряет быструю разработку и чистый, прагматичный дизайн. Он берет на себя большую часть хлопот по веб-разработке, чтобы вы могли сосредоточиться на написании приложения, не изобретая велосипед. Django особенно хорош для создания сложных, управляемых данными веб-приложений. Он предоставляет ORM (Object-Relational Mapper), систему шаблонов и мощную систему аутентификации.

Что такое React и его роль в создании интерактивного интерфейса

React — это JavaScript-библиотека для создания пользовательских интерфейсов. React делает упор на компонентный подход, позволяя разделять интерфейс на переиспользуемые элементы. Благодаря виртуальному DOM, React обеспечивает высокую производительность и отзывчивость веб-приложений. React отлично подходит для создания одностраничных приложений (SPA) и интерактивных интерфейсов.

Преимущества использования Django и React вместе

Совместное использование Django и React позволяет получить лучшее из обоих миров. Django обеспечивает мощный бэкенд для управления данными и API, а React создает современный и интерактивный интерфейс. Такая комбинация позволяет создавать масштабируемые и удобные веб-приложения.

Настройка окружения разработки

Установка Python и Django

Установите Python (версии 3.8 или выше) с официального сайта Python. Затем установите Django с помощью pip:

pip install django

Создание виртуального окружения и установка необходимых пакетов

Создание виртуального окружения позволяет изолировать зависимости проекта. Это предотвращает конфликты пакетов с другими проектами. Создайте и активируйте виртуальное окружение:

python -m venv venv
source venv/bin/activate  # Linux/macOS
.\venv\Scripts\activate  # Windows

Установите Django REST Framework и CORS headers:

pip install djangorestframework django-cors-headers

Установка Node.js и Create React App

Установите Node.js и npm (Node Package Manager) с официального сайта Node.js. Затем установите Create React App глобально:

npm install -g create-react-app

Создание Django Backend

Создание Django-проекта и приложения

Создайте Django-проект:

django-admin startproject myproject
cd myproject

Создайте Django-приложение:

python manage.py startapp myapp

Определение моделей данных (models.py)

Определите модели данных в myapp/models.py. Например, модель для хранения данных о рекламных кампаниях:

from django.db import models

class Campaign(models.Model):
    name = models.CharField(max_length=200)
    budget = models.FloatField()
    start_date = models.DateField()

    def __str__(self) -> str:
        return self.name

Создание API endpoints с использованием Django REST Framework

Создайте сериализатор для модели Campaign в myapp/serializers.py:

Реклама
from rest_framework import serializers
from .models import Campaign

class CampaignSerializer(serializers.ModelSerializer):
    class Meta:
        model = Campaign
        fields = '__all__'

Создайте API views в myapp/views.py:

from rest_framework import generics
from .models import Campaign
from .serializers import CampaignSerializer

class CampaignList(generics.ListCreateAPIView):
    queryset = Campaign.objects.all()
    serializer_class = CampaignSerializer

class CampaignDetail(generics.RetrieveUpdateDestroyAPIView):
    queryset = Campaign.objects.all()
    serializer_class = CampaignSerializer

Настройте URL-адреса в myapp/urls.py:

from django.urls import path
from . import views

urlpatterns = [
    path('campaigns/', views.CampaignList.as_view()),
    path('campaigns/<int:pk>/', views.CampaignDetail.as_view()),
]

Включите myapp/urls.py в основной urls.py проекта:

from django.urls import path, include

urlpatterns = [
    path('api/', include('myapp.urls')),
]

Настройка CORS для взаимодействия с React Frontend

Добавьте corsheaders в INSTALLED_APPS в settings.py:

INSTALLED_APPS = [
    ...
    'corsheaders',
]

Добавьте CorsMiddleware в MIDDLEWARE в settings.py:

MIDDLEWARE = [
    'corsheaders.middleware.CorsMiddleware',
    ...
]

Настройте CORS_ALLOWED_ORIGINS в settings.py:

CORS_ALLOWED_ORIGINS = [
    'http://localhost:3000',  # Адрес вашего React-приложения
]

Создание React Frontend

Создание React-приложения с помощью Create React App

Создайте React-приложение:

npx create-react-app frontend
cd frontend

Настройка структуры компонентов React

Создайте компоненты для отображения списка кампаний и деталей кампании. Например, CampaignList.js и CampaignDetail.js.

Взаимодействие с Django API (GET, POST запросы)

Используйте fetch или axios для выполнения запросов к Django API. Пример запроса GET для получения списка кампаний:

import React, { useState, useEffect } from 'react';

function CampaignList() {
    const [campaigns, setCampaigns] = useState([]);

    useEffect(() => {
        fetch('http://localhost:8000/api/campaigns/')
            .then(response => response.json())
            .then(data => setCampaigns(data));
    }, []);

    return (
        <ul>
            {campaigns.map(campaign => (
                <li key={campaign.id}>{campaign.name}</li>
            ))}
        </ul>
    );
}

export default CampaignList;

Отображение данных и обработка пользовательского ввода

Отобразите полученные данные в компонентах React. Используйте формы для обработки пользовательского ввода и отправки данных на сервер.

Интеграция Django и React

Размещение статических файлов React (build) в Django

После создания React-приложения, создайте production-build:

npm run build

Скопируйте содержимое папки frontend/build в папку static в Django-проекте (создайте, если ее нет).

Настройте STATICFILES_DIRS в settings.py:

import os

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static'),
]

Настройка роутинга и навигации между страницами

Настройте роутинг в Django для отображения React-приложения. В urls.py добавьте:

from django.views.generic import TemplateView

urlpatterns = [
    path('', TemplateView.as_view(template_name='index.html')),
    ...
]

Создайте шаблон templates/index.html:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>React App</title>
</head>
<body>
    <div id="root"></div>
    <script src="{% static 'main.js' %}"></script>
</body>
</html>

Замечание: Убедитесь, что {% load static %} добавлен в начало шаблона.

Развертывание веб-приложения

Разверните Django и React-приложение на сервере, используя такие инструменты, как Gunicorn и Nginx. Настройте Nginx для обслуживания статических файлов и проксирования запросов к Django.

Убедитесь, что настройки CORS правильно сконфигурированы для production-окружения.


Добавить комментарий