Date de sortie : 27 juin 2024
Documentation officielle : https://django-ninja.dev
Django Ninja 1.2 est une version de stabilisation. Pas de révolution dans le changelog, mais plusieurs correctifs importants qui touchent à la fiabilité quotidienne : compatibilité avec Python 3.12.4, validation des champs nullable, et améliorations sur la pagination. Le genre de version qu’on applique sans hésiter.
Les nouveautés principales
Correction des ForwardRef pour Python 3.12.4
Python 3.12.4 a introduit un changement dans l’évaluation des ForwardRef (les références en avant utilisées dans les annotations de type) qui cassait silencieusement certains schémas Pydantic dans Django Ninja. Cette version corrige le problème. Si vous avez rencontré des erreurs d’import ou de résolution de types après une mise à jour Python, c’est probablement ça.
Améliorations de LimitOffsetPagination
Le schéma d’entrée de LimitOffsetPagination a été revu. L’objet Input expose désormais les paramètres de manière plus cohérente, ce qui facilite la personnalisation de la pagination dans les projets qui en ont besoin.
from ninja.pagination import paginate, LimitOffsetPagination
@api.get("/items", response=list[ItemOut])
@paginate(LimitOffsetPagination)
def list_items(request):
return Item.objects.all()
Le comportement externe reste identique — les paramètres limit et offset fonctionnent comme avant — mais l’internationalisation du schéma est plus propre pour qui voudrait l’étendre.
Validation des champs nullable corrigée
Un bug affectait la validation des champs déclarés comme Optional ou avec None comme valeur par défaut. Dans certains cas, Pydantic v2 levait une erreur de validation là où il aurait dû accepter null. C’est corrigé.
from ninja import Schema
class ItemIn(Schema):
name: str
description: str | None = None # fonctionnait déjà
category_id: int | None = None # pouvait échouer dans certains cas — corrigé
Support de SmallAutoField dans l’ORM
Django dispose de plusieurs types de champs auto-incrémentés : AutoField, BigAutoField, et SmallAutoField. Ce dernier n’était pas correctement pris en charge lors de la génération des schémas ORM. C’est désormais le cas.
class SmallItem(models.Model):
# Utilise un entier sur 2 octets au lieu de 4
id = models.SmallAutoField(primary_key=True)
name = models.CharField(max_length=100)
La création de schéma via create_schema ou ModelSchema fonctionne maintenant sans erreur pour ces modèles.
Correction de la validation des dictionnaires avec validate_assignment
Avec validate_assignment=True dans un schéma Pydantic, la validation devait être déclenchée à chaque réassignation de champ. Un bug faisait que les dictionnaires imbriqués échappaient à cette validation dans certains cas. C’est corrigé dans cette version.
Correctif sur l’exposition de django_auth_superuser
Un bug de configuration pouvait exposer involontairement le backend django_auth_superuser dans la documentation OpenAPI générée. Ce correctif de sécurité mineure est inclus dans la 1.2.
É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.2 est une version de maintenance sérieuse. Les bugs corrigés sont discrets mais peuvent avoir un impact réel en production, notamment la compatibilité Python 3.12.4 et la validation des champs nullable. À appliquer dès que possible si vous tournez sur Python 3.12.ici ...