Se rendre au contenu

Django-ninja 1.6 est sorti

12 avril 2026 par
Django-ninja 1.6 est sorti
Makersquad

Date de sortie : 12 mars 2026

Release officielle : django-ninja 1.6.0

Une release riche pour django-ninja, qui rapproche le framework des cas d’usage d’API moderne : streaming, pagination par curseur, et routers mieux composables.


Les nouveautés principales

Routers idempotents

Un Router peut maintenant être monté plusieurs fois sur la même API ou sur des APIs différentes, chaque montage étant isolé dans sa configuration :

from ninja import NinjaAPI, Router

shared = Router()

@shared.get("/health")
def health(request):
    return {"ok": True}

api_v1 = NinjaAPI(version="1.0")
api_v2 = NinjaAPI(version="2.0")

api_v1.add_router("/", shared)
api_v2.add_router("/", shared)


Pagination par curseur

Nouvelle classe CursorPagination pour paginer proprement sur des datasets qui changent en continu :

from ninja.pagination import paginate, CursorPagination

@api.get("/events", response=list[EventOut])
@paginate(CursorPagination)
def list_events(request):
    return Event.objects.order_by("-created_at")

Le curseur est encodé en base64, ce qui évite les doublons ou les sauts lors de l’ajout de nouvelles lignes entre deux requêtes.


Streaming JSONL et SSE

Support natif du streaming avec validation par chunk :

from ninja.streaming import jsonl_stream, sse_stream

@api.get("/events/stream", response=list[EventOut])
def stream_events(request):
    def generator():
        for event in Event.objects.iterator():
            yield event
    return jsonl_stream(generator())

@api.get("/notifications")
def notifications(request):
    def generator():
        while True:
            yield {"event": "ping", "data": "alive"}
    return sse_stream(generator())

Chaque chunk est validé contre le schéma de réponse, comme pour une réponse standard.


Classe Status

Remplace la syntaxe tuple (status_code, body) désormais dépréciée :

from ninja import Status

# Avant
@api.post("/items")
def create(request, payload: ItemIn):
    return 201, {"id": 42}

# Après
@api.post("/items")
def create(request, payload: ItemIn):
    return Status(201, {"id": 42})


Optimisation de sérialisation

Quand la valeur retournée par la vue est déja une instance du schéma de réponse, django-ninja saute la validation redondante et sérialise directement. Gain mesurable sur les endpoints qui renvoient beaucoup d’objets.


Autres améliorations

  • Compatibilité Python 3.14 (annotations namespace)
  • Correction sur Optional[Union[...]]

É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

Les routers idempotents et le streaming sont les deux changements à connaitre. Le streaming en particulier rapproche django-ninja des capacités FastAPI, avec le même confort de validation par schéma. Le tuple (status, body) continue de fonctionner mais émet un warning : prévoyez la migration vers Status.

Django REST Framework 3.17 est sorti