Comment créer une application simple avec Django et React

15 min de lecture - 28 novembre 2025

hero section cover

Apprenez à développer une application web full-stack en utilisant Django pour le backend et React pour le frontend, grâce à un guide étape par étape.

Comment créer une application simple avec Django et React

Vous souhaitez créer une application web dotée d’un backend robuste et d’un frontend dynamique ? Associer Django, un framework Python, à React, une bibliothèque JavaScript, est un excellent moyen d’y parvenir. Django gère les tâches du backend telles que la gestion des bases de données et la création d’API, tandis que React crée une interface utilisateur réactive et interactive.

Étapes clés :

  1. Configurer votre environnement :
    • Installez Python 3.x pour Django et Node.js pour React.
    • Utilisez des environnements virtuels pour gérer les dépendances Python.
    • Vérifiez les installations à l'aide de python --version, node --version, puis npm --version.
  2. Organisez votre projet :
    • Créez des dossiers distincts pour le backend Django et le frontend React.
    • Utilisez django-admin startproject pour la configuration du backend et npx create-react-app pour l’initialisation du front-end.
  3. Construire le backend :
    • Créez des applications Django, définissez des modèles et générez des migrations.
    • Utilisez Django REST Framework pour créer des points de terminaison API.
    • Configurer django-cors-headers pour permettre la communication entre le front-end et le back-end.
  4. Développer le front-end :
    • Utilisez des composants React pour gérer les tâches et les interactions avec les utilisateurs.
    • Installez Axios pour les requêtes API et intégrez-le aux points de terminaison Django.
    • Personnalisez l'application avec du CSS pour obtenir une interface utilisateur épurée.
  5. Connexion et test :
    • Exécutez Django sur localhost:8000 et React sur localhost:3000.
    • Testez les points de terminaison de l'API à l'aide d'outils tels que Postman ou directement dans le navigateur.
    • Assurez-vous que les paramètres CORS sont correctement configurés pour une communication fluide.

Cette configuration vous permet de développer efficacement une application full-stack avec une séparation claire entre le backend et le frontend. Suivez ces étapes pour créer une application web évolutive et interactive.

Projet Django et React pour débutants – Créer une application de prise de notes FullStack

Configuration requise et installation

Avant de commencer à développer votre application Django et React, il est essentiel de configurer votre environnement de développement avec les outils et les dépendances nécessaires. Cette base vous aidera à créer, intégrer et tester vos composants Django et React en toute fluidité au fur et à mesure de votre progression.

Configuration système requise et outils

Pour commencer, votre machine de développement devra disposer de Python 3.x pour Django et de Node.js pour React. Plus précisément, Django 5.0 nécessite Python 3.x, tandis que React fonctionne avec Node.js version 12 ou supérieure.

Installation de Python : vous pouvez télécharger Python directement depuis son site officiel ou utiliser le gestionnaire de paquets de votre système. Pour les utilisateurs de macOS, Homebrew simplifie l’installation avec brew install python. Les utilisateurs de Windows doivent télécharger le programme d’installation depuis python.org, tandis que les utilisateurs de Linux peuvent l’installer à l’aide de commandes telles que apt install python3 sur Ubuntu ou des commandes similaires pour d’autres distributions.

Configuration de Node.js et npm : Node.js est fourni avec npm (Node Package Manager). Vous aurez besoin de la version 6 ou supérieure de npm ; la version 7.5.4 constitue un choix fiable. Téléchargez Node.js depuis nodejs.org ; npm sera automatiquement inclus.

Environnements virtuels Python : l’utilisation d’environnements virtuels est essentielle pour gérer les dépendances spécifiques à un projet sans conflits. Vous pouvez utiliser le module intégré venv ou des outils tels que pipenv ou virtualenvwrapper pour bénéficier de fonctionnalités supplémentaires. Si vous utilisez Windows, le virtualenvwrapper-win offre des fonctionnalités similaires.

Pour vérifier vos installations, exécutez ces commandes dans votre terminal :

python --version
node --version
npm --version

Création de la structure du projet

Une structure de projet bien organisée est essentielle pour séparer et gérer facilement votre code backend et frontend. Commencez par créer un répertoire principal pour votre projet :

mkdir django-react-app
cd django-react-app

À l'intérieur de ce répertoire, créez deux dossiers : l'un pour votre backend Django et l'autre pour votre frontend React. Cette séparation vous permet de maintenir et de déployer chaque partie indépendamment.

Configurez votre environnement virtuel Python dans le répertoire du projet :

python -m venv venv

Activez l'environnement virtuel :

  • Sous macOS/Linux : source venv/bin/activate
  • Sous Windows : venv\Scripts\activate

Cette étape garantit que toutes les dépendances Python de votre projet sont isolées.

Installation des paquets requis

Votre environnement étant prêt, il est temps d'installer les paquets nécessaires pour Django et React.

Paquets backend Django : Une fois votre environnement virtuel actif, installez Django et ses bibliothèques associées à l'aide de pip :

pip install django
pip install djangorestframework
pip install django-cors-headers
  • Django gère la logique côté serveur, la gestion de la base de données et le routage des URL.
  • Django REST Framework simplifie le processus de création d’API RESTful, facilitant ainsi la création de points de terminaison pour votre front-end React.
  • Django-cors-headers active le partage de ressources entre origines (CORS), indispensable à la communication entre votre front-end React (exécuté sur le port 3000) et votre backend Django (exécuté sur le port 8000).

Configuration du front-end React : pour configurer votre environnement React, utilisez l' create-react-app . Cette commande initialise un projet React et installe toutes les dépendances nécessaires :

npx create-react-app frontend

Cela créera un nouveau projet React dans un frontend répertoire, comprenant les paquets essentiels, les outils de développement et les scripts de compilation.

Package front-end supplémentaire : après avoir configuré votre projet React, accédez au frontend répertoire et installez Axios, une bibliothèque permettant d’effectuer des requêtes HTTP vers votre API Django :

cd frontend
npm install axios

À ce stade, votre environnement de développement est entièrement équipé avec Python 3.x, Django, Node.js, React et tous les outils nécessaires. L’environnement virtuel Python garantit l’isolation de vos dépendances backend, tandis que npm gère vos paquets JavaScript séparément. Vous êtes désormais prêt à commencer à développer votre application full-stack !

Création du backend avec Django

Configurer un backend Django avec des modèles de base de données, des points de terminaison API et l'intégration d'un frontend React.

Création d’un projet et d’une application Django

Commencez par créer un projet Django, qui comprend les paramètres, les configurations de base de données et les options spécifiques à l’application. Au sein de ce projet, vous développerez une application Django — un paquet Python conçu pour des tâches spécifiques telles que la gestion des données utilisateur ou du contenu.

Accédez au répertoire racine de votre projet (là où votre environnement virtuel est configuré) et créez le projet Django :

django-admin startproject backend .

Cette commande génère les fichiers du projet directement dans le répertoire actuel, ce qui évite de créer un dossier supplémentaire. Vous remarquerez l’apparition de nouveaux fichiers tels que manage.py (pour exécuter les commandes Django) et un backend répertoire contenant des fichiers tels que settings.py, urls.py, asgi.py, et wsgi.py.

Ensuite, créez une application pour gérer des fonctionnalités spécifiques. Par exemple, un système de gestion des tâches :

python manage.py startapp tasks

Cela crée un tasks répertoire contenant des fichiers essentiels tels que models.py, views.py, admin.py, ainsi qu’un migrations dossier. Veillez à éviter les conflits de noms avec les noms intégrés tels que « django » ou « test ».

Enregistrez l’application dans les paramètres de votre projet en l’ajoutant à la INSTALLED_APPS liste dans backend/settings.py:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'rest_framework',
    'corsheaders',
    'tasks',  # Register your app
]

Configuration des modèles et des sérialiseurs

Définissez votre structure de données à l’aide des modèles Django. Par exemple, un simple Task modèle pour l’application de gestion des tâches peut être ajouté dans tasks/models.py:

from django.db import models

class Task(models.Model):
    title = models.CharField(max_length=200)
    description = models.TextField(blank=True)
    completed = models.BooleanField(default=False)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        ordering = ['-created_at']

    def __str__(self):
        return self.title

Ce modèle comprend des champs tels que CharField pour les textes courts, TextField pour les contenus plus longs, BooleanField pour les valeurs vrai/faux, et DateTimeField pour les horodatages. La Meta classe spécifie des options telles que l'ordre par défaut.

Appliquez le modèle à votre base de données en exécutant les migrations :

python manage.py makemigrations tasks
python manage.py migrate

Pour convertir les données du modèle au format JSON, utilisez les sérialiseurs de Django REST Framework. Dans tasks/serializers.py, définissez un sérialiseur pour le Task modèle :

from rest_framework import serializers
from .models import Task

class TaskSerializer(serializers.ModelSerializer):
    class Meta:
        model = Task
        fields = ['id', 'title', 'description', 'completed', 'created_at', 'updated_at']
        read_only_fields = ['created_at', 'updated_at']

Le ModelSerializer génère automatiquement les champs et les méthodes en fonction du modèle. En énumérant explicitement les champs, vous vous assurez de ne pas exposer involontairement des données sensibles.

Création de points de terminaison d’API

Django REST Framework simplifie la création d’API. Pour les opérations CRUD standard, utilisez ViewSets avec des routeurs pour obtenir une structure RESTful épurée.

Dans tasks/views.py, créez des vues d'API :

from rest_framework import viewsets
from rest_framework.permissions import AllowAny
from .models import Task
from .serializers import TaskSerializer

class TaskViewSet(viewsets.ModelViewSet):
    queryset = Task.objects.all()
    serializer_class = TaskSerializer
    permission_classes = [AllowAny]  # For development only

Le ModelViewSet gère automatiquement la liste, la création, la consultation, la mise à jour et la suppression des tâches.

Configurez le routage des URL dans tasks/urls.py:

from django.urls import path, include
from rest_framework.routers import DefaultRouter
from .views import TaskViewSet

router = DefaultRouter()
router.register(r'tasks', TaskViewSet)

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

Incluez ces URL dans le fichier principal backend/urls.py :

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('tasks.urls')),
]

Configuration des en-têtes CORS

Pour permettre à votre frontend React (fonctionnant sur le port 3000) de communiquer avec le backend Django (sur le port 8000), configurez le partage de ressources entre origines (CORS). Sans cela, les navigateurs bloquent les requêtes inter-origines pour des raisons de sécurité.

Mettez à jour backend/settings.py pour y inclure la configuration CORS :

MIDDLEWARE = [
    'corsheaders.middleware.CorsMiddleware',  # Add this at the top
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

# CORS settings for development
CORS_ALLOWED_ORIGINS = [
    "http://localhost:3000",  # React development server
    "http://127.0.0.1:3000",
]

CORS_ALLOW_CREDENTIALS = True

Pour un test rapide, vous pouvez utiliser CORS_ALLOW_ALL_ORIGINS = True, mais il est plus sûr de spécifier les origines autorisées.

Test des points de terminaison de l'API

Avant d'intégrer le front-end React, testez les points de terminaison de l'API pour vous assurer qu'ils fonctionnent comme prévu. Démarrez le serveur de développement Django :

python manage.py runserver

Accédez à l’API à l’adresse http://127.0.0.1:8000/api/tasks/. Utilisez l’API navigable pour tester des opérations telles que les requêtes GET et POST.

Vous pouvez également effectuer des tests avec cURL ou Postman :

# Test GET request to list tasks
curl -X GET http://127.0.0.1:8000/api/tasks/

# Test POST request to create a task
curl -X POST http://127.0.0.1:8000/api/tasks/ \
  -H "Content-Type: application/json" \
  -d '{"title": "Test Task", "description": "This is a test task"}'

Pour les tests automatisés, ajoutez des cas de test dans tasks/tests.py:

from rest_framework.test import APITestCase
from rest_framework import status
from .models import Task

class TaskAPITestCase(APITestCase):
    def test_create_task(self):
        # Add your assertions and test logic here
        pass

Une fois le backend en place, vous êtes prêt à le connecter au frontend React.

Développement du front-end avec React

Pour créer une interface attrayante pour votre backend Django, vous utiliserez React afin de gérer les interactions avec les utilisateurs, qu'il s'agisse de consulter des tâches ou d'en ajouter de nouvelles.

Mise en place d’un projet React

Commencez par configurer votre front-end React à l’aide de Create React App. Accédez au répertoire racine de votre projet (où se trouve votre back-end Django) et exécutez la commande suivante :

npx create-react-app frontend
cd frontend

Cette commande configure une application React avec les fichiers essentiels tels que package.json, src/App.js, et public/index.html. Elle inclut également des outils tels que webpack pour le regroupement des fichiers, Babel pour la compilation JavaScript et un serveur de développement pour les tests.

Ensuite, installez Axios pour gérer les requêtes HTTP vers votre API Django :

npm install axios

Axios simplifie les appels API en gérant l’analyse JSON et en offrant une meilleure gestion des erreurs que la fonction intégrée fetch() . Il prend également en charge des fonctionnalités telles que les intercepteurs de requêtes et de réponses.

Votre structure de dossiers devrait désormais ressembler à ceci :

project-root/
├── backend/
│   ├── manage.py
│   ├── backend/
│   └── tasks/
└── frontend/
    ├── package.json
    ├── public/
    └── src/

Pour vérifier que tout fonctionne, démarrez le serveur de développement React :

npm start

Cela lance l'application à l'adresse http://localhost:3000, affichant la page d’accueil React par défaut. Laissez ce serveur en marche pendant le développement : il se recharge automatiquement lorsque vous effectuez des modifications.

Création de composants React

Créons un TaskList composant pour afficher les tâches récupérées depuis votre API Django. Ajoutez le code suivant dans src/components/TaskList.js:

import React from 'react';

const TaskList = ({ tasks, onToggleComplete, onDeleteTask }) => {
  return (
    <div className="task-list">
      <h2>Your Tasks</h2>
      {tasks.length === 0 ? (
        <p>No tasks available. Create your first task!</p>
      ) : (
        <ul>
          {tasks.map((task) => (
            <li key={task.id} className={`task-item ${task.completed ? 'completed' : ''}`}>
              <div className="task-content">
                <h3>{task.title}</h3>
                <p>{task.description}</p>
                <small>Created: {new Date(task.created_at).toLocaleDateString()}</small>
              </div>
              <div className="task-actions">
                <button 
                  onClick={() => onToggleComplete(task.id, !task.completed)}
                  className={task.completed ? 'btn-undo' : 'btn-complete'}
                >
                  {task.completed ? 'Undo' : 'Complete'}
                </button>
                <button 
                  onClick={() => onDeleteTask(task.id)}
                  className="btn-delete"
                >
                  Delete
                </button>
              </div>
            </li>
          ))}
        </ul>
      )}
    </div>
  );
};

export default TaskList;

Ensuite, créez un TaskForm composant permettant d’ajouter de nouvelles tâches. Ajoutez-le à src/components/TaskForm.js:

import React, { useState } from 'react';

const TaskForm = ({ onAddTask }) => {
  const [title, setTitle] = useState('');
  const [description, setDescription] = useState('');
  const [isSubmitting, setIsSubmitting] = useState(false);

  const handleSubmit = async (e) => {
    e.preventDefault();
    if (!title.trim()) return;

    setIsSubmitting(true);
    try {
      await onAddTask({ title: title.trim(), description: description.trim() });
      setTitle('');
      setDescription('');
    } catch (error) {
      console.error('Error adding task:', error);
    } finally {
      setIsSubmitting(false);
    }
  };

  return (
    <form onSubmit={handleSubmit} className="task-form">
      <h2>Add New Task</h2>
      <div className="form-group">
        <input
          type="text"
          placeholder="Task title"
          value={title}
          onChange={(e) => setTitle(e.target.value)}
          disabled={isSubmitting}
          required
        />
      </div>
      <div className="form-group">
        <textarea
          placeholder="Task description (optional)"
          value={description}
          onChange={(e) => setDescription(e.target.value)}
          disabled={isSubmitting}
          rows="3"
        />
      </div>
      <button type="submit" disabled={isSubmitting || !title.trim()}>
        {isSubmitting ? 'Adding...' : 'Add Task'}
      </button>
    </form>
  );
};

export default TaskForm;

Pour une mise en forme de base, créez un src/App.css fichier et ajoutez-y :

.task-list {
  margin: 20px 0;
}

.task-item {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 15px;
  border: 1px solid #ddd;
  margin-bottom: 10px;
  border-radius: 5px;
}

.task-item.completed {
  background-color: #f0f8f0;
  text-decoration: line-through;
  opacity: 0.7;
}

.task-form {
  background: #f9f9f9;
  padding: 20px;
  border-radius: 5px;
  margin-bottom: 20px;
}

.form-group {
  margin-bottom: 15px;
}

.form-group input, .form-group textarea {
  width: 100%;
  padding: 10px;
  border: 1px solid #ddd;
  border-radius: 3px;
}

.btn-complete, .btn-undo, .btn-delete {
  margin-left: 10px;
  padding: 5px 10px;
  border: none;
  border-radius: 3px;
  cursor: pointer;
}

.btn-complete { background: #28a745; color: white; }
.btn-undo { background: #ffc107; color: black; }
.btn-delete { background: #dc3545; color: white; }

Gestion de l'état et intégration de l'API

Les hooks React tels que useState et useEffect facilitent la gestion de l'état et l'interaction avec votre backend Django. Pour centraliser les appels API, créez un fichier de service src/services/api.js:

import axios from 'axios';

const API_BASE_URL = 'http://127.0.0.1:8000/api';

const api = axios.create({
  baseURL: API_BASE_URL,
  headers: {
    'Content-Type': 'application/json',
  },
});

export const taskAPI = {
  getTasks: () => api.get('/tasks/'),
  createTask: (taskData) => api.post('/tasks/', taskData),
  updateTask: (taskId, taskData) => api.put(`/tasks/${taskId}/`, taskData),
  deleteTask: (taskId) => api.delete(`/tasks/${taskId}/`),
};

export default api;

Enfin, intégrez le tout dans src/App.js:

import React, { useState, useEffect } from 'react';
import TaskList from './components/TaskList';
import TaskForm from './components/TaskForm';
import { taskAPI } from './services/api';
import './App.css';

function App() {
  const [tasks, setTasks] = useState([]);
  const [loading, setLoading] = useState(true);
  const [error, setError] = useState(null);

  useEffect(() => {
    fetchTasks();
  }, []);

  const fetchTasks = async () => {
    try {
      setLoading(true);
      const response = await taskAPI.getTasks();
      setTasks(response.data);
    } catch (err) {
      setError(err);
    } finally {
      setLoading(false);
    }
  };

  // Additional methods for adding, updating, and deleting tasks would go here
}

Avec cette configuration, votre front-end React est prêt à gérer des tâches de manière interactive tout en communiquant de manière transparente avec votre backend Django.

background image
Votre serveur freine-t-il votre croissance ?

Vous en avez assez des déploiements lents ou des limites de bande passante ? FDC Servers offre une puissance dédiée instantanée, une couverture mondiale et des formules flexibles adaptées à toutes les échelles. Prêt à passer au niveau supérieur ?

Libérez dès maintenant tout le potentiel de vos performances

Connecter Django et React

Maintenant que votre backend et votre frontend sont opérationnels, l’étape suivante consiste à garantir une communication fluide entre les deux. Cela implique de configurer des points de terminaison API, de gérer les requêtes et de résoudre d’éventuels problèmes d’intégration.

Configuration des URL d’API dans React

Votre application React doit savoir où se trouvent les points de terminaison de l’API Django. Pour ce faire, mettez à jour le src/services/api.js fichier avec les configurations spécifiques à votre environnement :

import axios from 'axios';

// Determine API base URL based on environment
const getApiBaseUrl = () => {
  if (process.env.NODE_ENV === 'production') {
    return process.env.REACT_APP_API_URL || 'https://your-production-domain.com/api';
  }
  return 'http://127.0.0.1:8000/api';
};

const API_BASE_URL = getApiBaseUrl();

const api = axios.create({
  baseURL: API_BASE_URL,
  headers: {
    'Content-Type': 'application/json',
  },
  timeout: 10000, // 10 second timeout
});

export const taskAPI = {
  getTasks: () => api.get('/tasks/'),
  createTask: (taskData) => api.post('/tasks/', taskData),
  updateTask: (taskId, taskData) => api.put(`/tasks/${taskId}/`, taskData),
  deleteTask: (taskId) => api.delete(`/tasks/${taskId}/`),
};

export default api;

En production, ajoutez un .env fichier à la racine de votre projet React avec le contenu suivant :

REACT_APP_API_URL=https://your-production-domain.com/api

Cette configuration garantit que votre application React peut interagir de manière transparente avec votre backend Django, que vous soyez dans un environnement de développement local ou que vous déployiez en production. Une fois les points de terminaison de l’API configurés, vous êtes prêt à récupérer et à manipuler les données du backend.

Récupération des données depuis le backend

Une fois la configuration de l’API définie, vous pouvez effectuer des opérations CRUD pour gérer les données entre React et Django. Mettez à jour src/App.js pour gérer ces opérations :

import React, { useState, useEffect } from 'react';
import TaskList from './components/TaskList';
import TaskForm from './components/TaskForm';
import { taskAPI } from './services/api';
import './App.css';

function App() {
  const [tasks, setTasks] = useState([]);
  const [loading, setLoading] = useState(true);
  const [error, setError] = useState(null);

  useEffect(() => {
    fetchTasks();
  }, []);

  const fetchTasks = async () => {
    try {
      setLoading(true);
      setError(null);
      const response = await taskAPI.getTasks();
      setTasks(response.data);
    } catch (err) {
      setError('Failed to fetch tasks. Please check your connection.');
      console.error('Error fetching tasks:', err);
    } finally {
      setLoading(false);
    }
  };

  const handleAddTask = async (taskData) => {
    try {
      const response = await taskAPI.createTask(taskData);
      setTasks(prevTasks => [...prevTasks, response.data]);
    } catch (err) {
      console.error('Error adding task:', err);
      throw err; // Re-throw to let TaskForm handle the error
    }
  };

  const handleToggleComplete = async (taskId, completed) => {
    try {
      const taskToUpdate = tasks.find(task => task.id === taskId);
      const updatedTaskData = { ...taskToUpdate, completed };

      const response = await taskAPI.updateTask(taskId, updatedTaskData);
      setTasks(prevTasks =>
        prevTasks.map(task =>
          task.id === taskId ? response.data : task
        )
      );
    } catch (err) {
      console.error('Error updating task:', err);
    }
  };

  const handleDeleteTask = async (taskId) => {
    if (!window.confirm('Are you sure you want to delete this task?')) {
      return;
    }

    try {
      await taskAPI.deleteTask(taskId);
      setTasks(prevTasks => prevTasks.filter(task => task.id !== taskId));
    } catch (err) {
      console.error('Error deleting task:', err);
    }
  };

  if (loading) {
    return <div className="loading">Loading tasks...</div>;
  }

  return (
    <div className="App">
      <header className="App-header">
        <h1>Task Manager</h1>
      </header>
      <main className="container">
        {error && <div className="error-message">{error}</div>}
        <TaskForm onAddTask={handleAddTask} />
        <TaskList 
          tasks={tasks}
          onToggleComplete={handleToggleComplete}
          onDeleteTask={handleDeleteTask}
        />
      </main>
    </div>
  );
}

export default App;

Ce code gère la création, la mise à jour et la suppression des tâches, ainsi que la gestion des erreurs. L’interface utilisateur se met immédiatement à jour pour offrir une expérience utilisateur fluide, et les erreurs sont gérées de manière élégante en annulant les modifications ou en affichant des messages appropriés.

Test et débogage de la connexion

L’un des obstacles les plus courants lors de l’interconnexion de Django et de React consiste à gérer les erreurs CORS (Cross-Origin Resource Sharing). Celles-ci surviennent car les navigateurs bloquent les requêtes entre différentes origines pour des raisons de sécurité. Pendant le développement, React s’exécute généralement sur localhost:3000, tandis que Django fonctionne sur localhost:8000, ce qui crée un scénario inter-origines.

Pour résoudre les problèmes liés au CORS, assurez-vous d’avoir configuré les en-têtes CORS dans vos paramètres Django, comme indiqué dans la section « Configuration des en-têtes CORS ». Après avoir effectué les modifications, redémarrez votre serveur Django pour les appliquer.

Voici quelques erreurs courantes liées aux requêtes API et leurs solutions :

  • HTTP 400 (Bad Request) : cela signifie généralement que certaines données obligatoires sont manquantes ou mal formées dans le corps de la requête. Par exemple, en novembre 2023, FintanMi a rencontré une erreur 400 lors de la création d’une communauté dans un projet utilisant Django REST Framework et React, car le owner champ était manquant dans la requête. Vérifiez toujours que votre front-end envoie tous les champs obligatoires attendus par les modèles Django.
  • HTTP 405 (Méthode non autorisée) : cette erreur se produit lorsque le point de terminaison de l’API ne prend pas en charge la méthode HTTP utilisée. Par exemple, FintanMi a signalé une erreur 405 en tentant de supprimer un message ; ce problème a été résolu en mettant à jour la vue Django de generics.RetrieveUpdateAPIView à generics.RetrieveUpdateDestroyAPIView afin d’inclure la prise en charge de DELETE requests.

Exécution et test de l'application

Une fois votre backend Django et votre frontend React connectés, il est temps de lancer les deux serveurs de développement et de tester l’application. Cela implique d’exécuter deux serveurs simultanément et de s’assurer que tout fonctionne ensemble sans heurts.

Démarrage des serveurs de développement

Pour exécuter votre application Django-React, vous aurez besoin de deux fenêtres de terminal, une pour chaque serveur. Cette configuration permet au backend et au frontend de fonctionner indépendamment tout en communiquant via des appels API.

Démarrage du serveur backend Django :

  1. Ouvrez la première fenêtre de terminal et accédez au répertoire racine de votre projet Django.
  2. Activez votre environnement virtuel Python :

    source venv/bin/activate
    
  3. Démarrez le serveur de développement Django :

    python manage.py runserver
    

    Le serveur sera accessible à l'adresse http://127.0.0.1:8000/.

Démarrer le serveur frontend React :

  1. Ouvrez une deuxième fenêtre de terminal et accédez au répertoire de votre projet React :

    cd frontend
    
  2. Lancez le serveur de développement React :

    npm start
    

    Cela ouvrira automatiquement une fenêtre de navigateur à l'adresse http://localhost:3000/.

Une fois les deux serveurs en cours d’exécution, vous pouvez commencer à tester les fonctionnalités de votre application.

Tester l’ensemble des fonctionnalités de l’application

Les serveurs étant opérationnels et le CORS ainsi que les points de terminaison de l’API correctement configurés, il est temps de valider le flux de données entre le front-end et le back-end.

Vérification de l'API backend :

  • Testez directement vos points de terminaison API Django en vous rendant à l’adresse suivante :

    http://localhost:8000/api/tasks
    

    Cela devrait afficher l’interface API navigable du Django REST Framework, où vous pouvez effectuer des opérations CREATE et READ.

  • Accédez à l’interface d’administration Django à l’adresse suivante :

    http://localhost:8000/admin
    

    Connectez-vous avec vos identifiants de super-utilisateur pour créer, modifier ou supprimer des tâches. Vous pouvez également tester les opérations UPDATE et DELETE en vous rendant à l'adresse suivante :

    http://localhost:8000/api/tasks/{id}
    

Tests d'intégration front-end/back-end :

  • Ouvrez votre application React à l'adresse http://localhost:3000 et vérifiez qu’elle se charge correctement, en affichant les tâches provenant du backend Django.
  • Testez chaque opération CRUD via l'interface React :
    • Ajoutez une nouvelle tâche et vérifiez qu’elle apparaît à la fois dans l’interface utilisateur React et dans le backend.
    • Modifiez une tâche existante et assurez-vous que les modifications sont enregistrées.
    • Supprimez une tâche et vérifiez qu’elle a bien été supprimée à la fois du front-end et de la base de données.

Si votre application inclut des filtres ou d’autres fonctionnalités, testez-les minutieusement pour vous assurer que les tâches s’affichent comme prévu.

Résolution des problèmes courants

Si vous rencontrez des problèmes lors des tests, voici quelques solutions courantes à essayer.

Erreurs de connexion à l'API :

  • Assurez-vous que les deux serveurs fonctionnent sur leurs ports respectifs : Django sur http://localhost:8000 et React sur http://localhost:3000.
  • Utilisez les outils de développement du navigateur (onglet « Réseau ») pour identifier les codes d'état HTTP tels que 404 ou 500.
  • Vérifiez le proxy paramètre dans le fichier package.json :

    "proxy": "http://localhost:8000"
    

    Si vous apportez des modifications, redémarrez le serveur React.

Problèmes de démarrage du serveur :

  • Si le serveur Django ne démarre pas, vérifiez s'il manque des migrations :

    python manage.py makemigrations
    python manage.py migrate
    
  • En cas de problèmes avec le serveur React, essayez de réinstaller les dépendances :

    npm install
    

Problèmes de flux de données :

  • Utilisez les outils de développement du navigateur pour inspecter les requêtes réseau et les erreurs de console.
  • Ajoutez des instructions de débogage, telles que console.log() dans React ou print dans les vues Django, pour suivre le flux de données.
  • Vérifiez bien que les URL de l'API dans votre application React correspondent exactement aux modèles d'URL de Django, y compris les barres obliques finales (par exemple, /api/tasks/).

Résumé et prochaines étapes

Vous avez créé une application web combinant Django et React, ce qui vous a permis de vous familiariser avec le développement full-stack. Ce projet met en avant des concepts essentiels tels que la séparation du backend et du frontend, l’exécution d’opérations CRUD et la gestion des requêtes inter-origines à l’aide des paramètres CORS. Au cours de ce projet, vous avez utilisé Django REST Framework pour créer des API et vous vous êtes servi des hooks React pour la gestion de l’état — des compétences qui permettent une intégration fluide entre ces deux outils puissants.

Faire passer votre application au niveau supérieur

Il existe de nombreuses possibilités pour étendre les fonctionnalités de votre application. Par exemple, vous pouvez ajouter une authentification JWT à l’aide de Django REST Framework afin de sécuriser les données des utilisateurs et l’accès aux API. Cela vous permettrait de proposer des fonctionnalités spécifiques à chaque utilisateur et des expériences personnalisées.

Si votre application nécessite des mises à jour en temps réel, pensez à utiliser Django Channels pour activer la prise en charge de WebSocket. C’est la solution idéale pour des fonctionnalités telles que les tableaux de bord en direct, les systèmes de chat ou les notifications, transformant ainsi votre application en une plateforme plus dynamique et interactive.

À mesure que votre application se développe, la visualisation avancée des données devient essentielle. En combinant les capacités de rendu de React avec une récupération efficace des données côté serveur, vous serez en mesure de gérer et d’afficher efficacement des ensembles de données complexes.

Préparation à la mise en production

Lorsque vous préparez votre application pour la mise en production, concentrez-vous sur le déploiement, la sécurité et les performances. Si la configuration actuelle est idéale pour le développement local, les environnements de production nécessitent des étapes supplémentaires. Celles-ci incluent la configuration des variables d’environnement, l’optimisation de votre base de données et la mise en place de mécanismes robustes de gestion des erreurs.

Ces améliorations s’appuient sur les compétences que vous avez déjà acquises, telles que la conception d’API, l’architecture basée sur les composants et l’intégration full-stack. En maîtrisant ces techniques avancées, vous serez parfaitement armé pour mener à bien des projets d’envergure et continuer à évoluer en tant que développeur web.

FAQ

Quels sont les avantages d’utiliser Django pour le backend et React pour le frontend lors du développement d’une application web ?

L'utilisation de Django pour le backend et de React pour le frontend constitue une combinaison puissante pour le développement d'applications web modernes. Django offre un framework solide, doté d'outils qui rationalisent le développement du backend, tandis que React excelle dans la création d'interfaces utilisateur dynamiques et interactives.

Cette combinaison favorise une séparation claire des responsabilités, ce qui contribue à maintenir la base de code organisée et facilite son extension au fil du temps. La structure basée sur les composants de React favorise la réutilisation des éléments d’interface utilisateur, et le REST Framework de Django simplifie le processus de création d’API, garantissant une communication fluide entre le front-end et le back-end. Ensemble, ils offrent une approche rapide, efficace et centrée sur l’utilisateur pour le développement d’applications.

Comment résoudre les problèmes de CORS lors de la connexion d’un front-end React à un back-end Django ?

Pour résoudre les problèmes de CORS entre un front-end React et un back-end Django, le django-cors-headers package constitue une solution pratique. Commencez par l’installer à l’aide de pip. Ensuite, dans votre settings.py fichier, ajoutez 'corsheaders' à la INSTALLED_APPS liste. Ensuite, ajoutez 'corsheaders.middleware.CorsMiddleware' tout en haut de la MIDDLEWARE liste pour garantir un ordre d’exécution correct des middlewares.

Pendant le développement, vous pouvez simplifier les choses en définissant CORS_ORIGIN_ALLOW_ALL = True dans votre settings.py. Cela autorise les requêtes provenant de n'importe quelle origine. Cependant, dans un environnement de production, il est beaucoup plus sûr de définir des domaines de confiance spécifiques à l'aide du CORS_ALLOWED_ORIGINS paramètre. Cette approche permet de maintenir un niveau de sécurité plus élevé.

Grâce à cette configuration, votre application React peut interagir sans problème avec vos API Django tout en restant conforme aux exigences CORS.

Comment préparer mes applications Django et React pour un déploiement en production ?

Pour préparer vos applications Django et React à la production, commencez par ajuster vos paramètres Django afin d’assurer une configuration sécurisée. Cela inclut notamment de définir DEBUG à False et de spécifier le ALLOWED_HOSTS pour contrôler quels domaines peuvent accéder à votre application. Ces modifications sont essentielles pour protéger votre application dans un environnement de production.

Ensuite, choisissez une plateforme d’hébergement fiable pour votre backend Django et vos fichiers statiques. Assurez-vous que votre infrastructure est conçue pour gérer le trafic et les exigences d’un environnement de production. Pour le frontend React, utilisez les outils de compilation appropriés afin de générer une version de production optimisée.

Une fois votre application React prête, configurez un serveur web tel que Nginx pour servir à la fois le front-end React et le backend Django. Une configuration correcte du serveur garantit le fonctionnement efficace de votre application et offre une expérience fluide aux utilisateurs.

Avant la mise en production, testez minutieusement votre application dans l’environnement de production. Cette étape permet d’identifier et de résoudre tout problème, garantissant ainsi le fonctionnement fiable de votre application une fois qu’elle sera lancée.

Blog

À l'honneur cette semaine

Plus d'articles
Comment héberger les modèles d'IA Ollama sur des serveurs dédiés
#AI

Comment héberger les modèles d'IA Ollama sur des serveurs dédiés

Découvrez comment héberger les modèles d'IA Ollama sur des serveurs dédiés afin de garantir la sécurité des données, d'assurer l'évolutivité et d'améliorer les performances.

5 min de lecture - 8 septembre 2025

#server-performance#vps

Comment installer et utiliser Redis sur un VPS

9 min de lecture - 7 janvier 2026

Plus d'articles