Création d'API RESTful dans Django avec Django REST Framework
Django REST Framework (DRF) est une boîte à outils puissante et flexible pour la création d'API Web. Elle simplifie le processus de création d'API RESTful, en fournissant des fonctionnalités telles que des sérialiseurs, des ensembles de vues et des mécanismes d'authentification prêts à l'emploi.
Configuration du framework Django REST
Avant de pouvoir créer une API RESTful, vous devez installer Django REST Framework et l'ajouter à votre projet. Exécutez la commande suivante pour installer DRF:
pip install djangorestframework
Ensuite, ajoutez 'rest_framework' à INSTALLED_APPS
dans votre fichier settings.py
:
INSTALLED_APPS = [
...,
'rest_framework',
]
Créer une API simple
Créons une API pour un modèle simple appelé Book
. La première étape consiste à définir le modèle dans models.py
:
from django.db import models
class Book(models.Model):
title = models.CharField(max_length=255)
author = models.CharField(max_length=255)
published_date = models.DateField()
isbn = models.CharField(max_length=13)
def __str__(self):
return self.title
Après avoir défini le modèle, exécutez les migrations pour créer la table de base de données:
python manage.py makemigrations
python manage.py migrate
Créer un sérialiseur
Les sérialiseurs dans DRF convertissent les types de données complexes comme les modèles Django en JSON. Créez un sérialiseur pour le modèle Book
:
from rest_framework import serializers
from .models import Book
class BookSerializer(serializers.ModelSerializer):
class Meta:
model = Book
fields = '__all__'
Vues et URL du bâtiment
DRF propose deux méthodes principales pour créer des vues API: les vues basées sur les fonctions et les vues basées sur les classes. Ici, nous utilisons des vues basées sur les classes avec APIView
:
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from .models import Book
from .serializers import BookSerializer
class BookListCreateAPIView(APIView):
def get(self, request):
books = Book.objects.all()
serializer = BookSerializer(books, many=True)
return Response(serializer.data)
def post(self, request):
serializer = BookSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
Ensuite, configurez les URL pour cette vue dans urls.py
:
from django.urls import path
from .views import BookListCreateAPIView
urlpatterns = [
path('books/', BookListCreateAPIView.as_view(), name='book-list-create'),
]
Tester l'API
Une fois le serveur en cours d'exécution, vous pouvez tester l'API à l'adresse http://127.0.0.1:8000/books/
à l'aide d'outils tels que Postman ou curl. Une requête GET récupère tous les livres et une requête POST vous permet de créer un nouveau livre.
Améliorer l'API avec ViewSets
Pour un code plus concis et réutilisable, vous pouvez utiliser ViewSet
et Router
de DRF. Voici comment mettre à jour l'API pour utiliser un ModelViewSet
:
from rest_framework.viewsets import ModelViewSet
from .models import Book
from .serializers import BookSerializer
class BookViewSet(ModelViewSet):
queryset = Book.objects.all()
serializer_class = BookSerializer
Ensuite, configurez le routeur dans urls.py
:
from rest_framework.routers import DefaultRouter
from .views import BookViewSet
router = DefaultRouter()
router.register(r'books', BookViewSet, basename='book')
urlpatterns = router.urls
Conclusion
Django REST Framework simplifie la création d'API RESTful robustes et flexibles. En utilisant des sérialiseurs, des vues et des routeurs, vous pouvez créer des API qui gèrent facilement des modèles de données complexes. Grâce à cette base, vous pouvez désormais explorer des fonctionnalités avancées telles que les autorisations personnalisées, la pagination et l'authentification dans DRF.