Date de sortie : 7 décembre 2023
Documentation officielle : https://django-ninja.dev
Django Ninja 1.1 marque une étape importante pour le framework : l’authentification asynchrone devient enfin un citoyen de première classe, et le support de Pydantic v1 est définitivement abandonné. Un signal clair que le projet mise sur l’écosystème moderne de Python.
Les nouveautés principales
Support complet de l’authentification async
Jusqu’ici, les backends d’authentification dans Django Ninja devaient être synchrones. Avec la version 1.1, il est possible d’écrire des handlers d’authentification entièrement asynchrones, ce qui change la donne pour les applications qui s’appuient fortement sur async/await.
from ninja.security import HttpBearer
class AsyncAuth(HttpBearer):
async def authenticate(self, request, token):
user = await User.objects.aget(token=token)
return user
api = NinjaAPI(auth=AsyncAuth())
Concrètement, plus besoin de sync_to_async pour faire un simple accès base de données dans ton backend d’auth. Le code reste lisible et cohérent avec le reste d’une vue async.
Protection CSRF automatique pour l’auth par cookie
L’authentification par cookie est pratique mais exposée aux attaques CSRF si elle est mal configurée. Django Ninja 1.1 active désormais la protection CSRF automatiquement lorsqu’un backend d’authentification basé sur les cookies est utilisé. Moins de configuration manuelle, moins de risques d’oubli.
SessionAuth et SessionAuthSuperUser améliorés
Les classes SessionAuth et SessionAuthSuperUser ont été retravaillées pour mieux s’intégrer avec le système de session Django. SessionAuthSuperUser permet de restreindre certains endpoints aux seuls superutilisateurs sans écrire de logique supplémentaire.
from ninja.security import SessionAuth, SessionAuthSuperUser
# Endpoint accessible à tout utilisateur connecté
@api.get("/profile", auth=SessionAuth())
def get_profile(request):
return {"user": request.user.username}
# Endpoint réservé aux superutilisateurs
@api.get("/admin/stats", auth=SessionAuthSuperUser())
def get_admin_stats(request):
return {"total_users": User.objects.count()}
Suppression officielle du support Pydantic v1
C’était annoncé depuis un moment : Pydantic v1 n’est plus supporté à partir de Django Ninja 1.1. Si votre projet tourne encore sur Pydantic v1, c’est le moment de planifier la migration vers v2. La guide de migration Pydantic est votre meilleur allié pour cette transition.
É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.1 consolide le virage async du framework et nettoie la dette technique liée à Pydantic v1. Si vous utilisiez de l’authentification synchrone dans des contextes async, la mise à jour vaut largement le coup. La suppression de Pydantic v1 est un signal fort : le projet avance, et il faut avancer avec lui.