Se rendre au contenu

Django Ninja 1.0 est sorti

16 novembre 2023 par
Django Ninja 1.0 est sorti
Makersquad

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 ?

FeatureDjango REST FrameworkDjango Ninja
ValidationSerializersPydantic
DocumentationManuelle / drf-spectacularAutomatique (OpenAPI)
PerformanceBonneExcellente
Type hintsOptionnelNatif
AsyncLimité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.


Django 5.0 est sorti