Nouveau : Datasets open source gratuits disponibles !Decouvrir →
🐍
Intermediaire 30 min Django

API REST avec Django

Pourquoi API REST avec Django ?

L'API REST (Representational State Transfer) est un type d'architecture web qui permet aux systèmes d'échanger des données de manière standardisée et sécurisée. En tant que développeur Django, vous aurez souvent besoin de créer une API pour interagir avec d'autres applications ou services.

Un cas d'usage concret : Imaginez que vous développez une application mobile et que vous voulez afficher les articles d'un blog dans l'application. Pour ce faire, votre application mobile devra communiquer avec votre backend Django qui contient la logique du blog. C'est là qu'intervient l'API REST pour permettre cette communication sécurisée.

Prerequis

  • Connaissances de base en Python et Django
  • Connaissance des bases de données SQL
  • Connexion à un environnement terminal (pour exécuter les commandes)
  • Un éditeur de texte ou un IDE pour écrire le code

Concepts fondamentaux

  1. Views : Les views sont les "gardiens" des routes de votre API. Elles définissent comment une requête HTTP est traitée et quel type de réponse est renvoyé.
## Importer les bibliothèques nécessaires
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
import json

@csrf_exempt
def article_list(request):
    if request.method == 'GET':
        articles = Article.objects.all()
        data = [{'id': article.id, 'title': article.title} for article in articles]
        return JsonResponse(data, safe=False)
  1. URLs : Les URLs définissent les routes de votre API et les views qui doivent être appelées pour chaque route.
## Définir les URL pour l'API
from django.urls import path
from .views import article_list

urlpatterns = [
    path('articles/', article_list, name='article-list'),
]
  1. Models : Les models définissent la structure de votre base de données et permettent d'interagir avec elle.
## Définir le model pour les articles
from django.db import models

class Article(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
  1. Serializers : Les serializers convertissent les objets Python en format JSON et vice versa.
## Importer les bibliothèques nécessaires
from rest_framework import serializers

class ArticleSerializer(serializers.ModelSerializer):
    class Meta:
        model = Article
        fields = ['id', 'title', 'content']
  1. Routers : Les routers simplifient la création des URL pour les vues d'API.
## Importer les bibliothèques nécessaires
from rest_framework.routers import DefaultRouter
from .views import ArticleViewSet

router = DefaultRouter()
router.register(r'articles', ArticleViewSet)
urlpatterns += router.urls

Mise en pratique : projet fil rouge

Nous allons créer un mini-projet complet pour une API de blog. Ce projet comprendra les opérations CRUD (Create, Read, Update, Delete) pour les articles.

Étape 1 : Créer le modèle Article

## models.py
from django.db import models

class Article(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    pub_date = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.title

Étape 2 : Créer le serializer ArticleSerializer

## serializers.py
from rest_framework import serializers
from .models import Article

class ArticleSerializer(serializers.ModelSerializer):
    class Meta:
        model = Article
        fields = ['id', 'title', 'content', 'pub_date']

Étape 3 : Créer les vues et les routes ArticleViewSet

## views.py
from rest_framework import viewsets
from .models import Article
from .serializers import ArticleSerializer

class ArticleViewSet(viewsets.ModelViewSet):
    queryset = Article.objects.all()
    serializer_class = ArticleSerializer
django
## urls.py
from django.urls import path, include
from rest_framework.routers import DefaultRouter
from .views import ArticleViewSet

router = DefaultRouter()
router.register(r'articles', ArticleViewSet)

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

Étape 4 : Migrer la base de données et démarrer le serveur

python manage.py makemigrations
python manage.py migrate
python manage.py runserver

Erreurs frequentes et debugging

  1. La réponse n'est pas en format JSON

    # ❌ Mauvais
    return HttpResponse(data)
    
    # ✅ Correct
    import json
    from django.http import JsonResponse
    return JsonResponse(data, safe=False)
    
  2. L'erreur 404 lors de l'accès à une route non trouvée

    # ❌ Mauvais
    from django.urls import path
    from .views import article_list
    
    urlpatterns = [
        path('articles/', article_list),
    ]
    
    # ✅ Correct
    from django.urls import path
    from .views import article_list, ArticleViewSet
    
    router = DefaultRouter()
    router.register(r'articles', ArticleViewSet)
    
    urlpatterns = [
        path('', include(router.urls)),
    ]
    
  3. Le champ pub_date n'est pas correctement affiché

    # ❌ Mauvais
    from rest_framework import serializers
    
    class ArticleSerializer(serializers.ModelSerializer):
        class Meta:
            model = Article
            fields = ['id', 'title', 'content']
    
    # ✅ Correct
    from rest_framework import serializers
    from .models import Article
    
    class ArticleSerializer(serializers.ModelSerializer):
        pub_date = serializers.DateTimeField(format='%Y-%m-%d %H:%M:%S')
    
        class Meta:
            model = Article
            fields = ['id', 'title', 'content', 'pub_date']
    

Pour aller plus loin

  1. L'utilisation de Django REST Framework (DRF) : DRF est une bibliothèque complète pour créer des APIs avec Django.

  2. La gestion des permissions et des droits d'accès : Apprenez à contrôler qui peut accéder aux différentes routes de votre API.

  3. L'ajout de pagination et de filtrage : Améliorez vos vues pour gérer les grandes quantités de données et permettre des filtres avancés.

Défi pratique : Ajoutez une fonctionnalité d'upload d'images aux articles en utilisant Django REST Framework et le package django-storages.

Besoin d'aide sur Django ?

Besoin d'aide sur un projet technique ? Decrivez-le pour des conseils personnalises.

Recevoir des conseils

Questions frequentes

Quelle est la différence entre une requête GET et POST en API REST avec Django ?
Une requête GET est utilisée pour récupérer des données sans modifier le serveur, tandis qu'une requête POST est utilisée pour envoyer des données au serveur afin de les traiter ou de les stocker.
Comment configurer une route en Django pour gérer les requêtes API REST ?
Pour configurer une route, vous devez ajouter un chemin dans le fichier `urls.py` du projet et lier ce chemin à une fonction de vue qui va traiter la requête.
Quelles bibliothèques Django sont recommandées pour travailler avec les API REST ?
Il est recommandé d'utiliser Django Rest Framework (DRF), qui offre des outils puissants pour créer des APIs RESTful, et Django-Tastypie pour une approche plus simple.

Pages liees

Chaque semaine, le meilleur de la tech francaise

Tendances, salaires, outils et opportunites — directement dans votre boite mail.

Gratuit. Desabonnement en un clic. Pas de spam.