Date de sortie : 16 novembre 2023
Documentation officielle : Django Ninja 1.0
Django Ninja passe en 1.0 et devient un choix sérieux pour les APIs Django. Vous aimez FastAPI mais vous êtes sur Django ? C’est exactement ce qu’il vous faut : type hints, Pydantic, OpenAPI automatique — le tout intégré à Django.

Qu’est-ce que Django Ninja ?
Django Ninja est un framework pour construire des APIs avec Django, inspiré de FastAPI :
from ninja import NinjaAPI
api = NinjaAPI()
@api.get("/hello")
def hello(request, name: str = "World"):
return {"message": f"Hello {name}"}
Type hints + validation Pydantic + documentation OpenAPI automatique.
Les nouveautés de la version 1.0
Support de Pydantic v2
Pydantic v2 est réécrit en Rust avec des performances améliorées :
from ninja import Schema
class UserIn(Schema):
username: str
email: str
age: int | None = None # Syntaxe Python 3.10+
class UserOut(Schema):
id: int
username: str
Performances améliorées
- ~10% de gain moyen sur les projets
- Jusqu’à 4x plus rapide sur certains cas de parsing/serialization
Contexte de requête dans Pydantic
La requête est passée automatiquement au contexte Pydantic :
from ninja import Schema
from pydantic import field_validator
class ItemSchema(Schema):
name: str
@field_validator('name')
@classmethod
def validate_name(cls, v, info):
request = info.context['request']
# Accès à la requête pendant la validation
return v
Migration depuis 0.x
Si vous utilisiez la classe Schema, la migration est simple :
# Les deux fonctionnent from ninja import Schema # Recommandé from pydantic import BaseModel # Compatible
API stabilisée
La version 1.0 marque la stabilisation de l’API. Les futures versions 1.x seront rétrocompatibles.
Pourquoi Django Ninja ?
| Feature | Django REST Framework | Django Ninja |
|---|---|---|
| Validation | Serializers | Pydantic |
| Documentation | Manuelle / drf-spectacular | Automatique (OpenAPI) |
| Performance | Bonne | Excellente |
| Type hints | Optionnel | Natif |
| Async | Limité | Natif |
Exemple complet
from ninja import NinjaAPI, Schema
from typing import List
api = NinjaAPI()
class BookIn(Schema):
title: str
author: str
year: int
class BookOut(Schema):
id: int
title: str
author: str
@api.post("/books", response=BookOut)
def create_book(request, book: BookIn):
obj = Book.objects.create(**book.dict())
return obj
@api.get("/books", response=List[BookOut])
def list_books(request):
return Book.objects.all()
Échanger avec un expert Django
Nous revenons vers vous sous 24h.
Chez Makersquad, nous accompagnons nos clients dans la conception d’application modernes et performantes avec Django .Que vous souhaitiez lancer une nouvelle API, moderniser une architecture existante ou améliorer les performances de vos services backend, notre équipe met son expertise à votre disposition pour concevoir des solutions fiables, rapides et parfaitement adaptées à vos enjeux métier.
À retenir
Django Ninja 1.0 comble un vide entre DRF (puissant mais verbeux) et FastAPI (moderne mais pas Django). Si vous construisez des APIs avec Django et que les annotations de type vous parlent, cette 1.0 mérite vraiment qu’on s’y intéresse.