Se rendre au contenu

Django REST Framework 3.11

Django 3.0 et schémas OpenAPI améliorés
12 décembre 2019 par
Django REST Framework 3.11
Makersquad

Date de sortie : 12 décembre 2019

Documentation officielle : https://www.django-rest-framework.org/community/release-notes/#311x-series

Django 3.0 est sorti le même jour, et DRF 3.11 est là pour l’accueillir. Cette version accompagne la migration vers la nouvelle génération de Django tout en affinant le support OpenAPI introduit dans les versions précédentes. C’est aussi la dernière version à supporter Python 3.5 et Django 1.11 — une page se tourne.


Les nouveautés principales

Support de Django 3.0

DRF 3.11 supporte Django 3.0 dès le jour de sa sortie. Pas de mauvaise surprise au moment de migrer : les filtres, serializers et viewsets continuent de fonctionner comme attendu avec la nouvelle version du framework. La matrice de compatibilité couvre Python 3.5, 3.6, 3.7 et 3.8.


Améliorations des schémas OpenAPI

Le générateur de schéma OpenAPI devient plus intelligent. Il est maintenant capable de :

  • mapper automatiquement les renderers et parsers déclarés sur une vue vers les types MIME correspondants dans le schéma
  • gérer le type JSON schema pour les HStoreField de PostgreSQL
  • extraire les descriptions d’opérations à partir des docstrings des méthodes de vue
class UserViewSet(viewsets.ModelViewSet):
    """
    Liste et gestion des utilisateurs de l'application.
    """

    def retrieve(self, request, *args, **kwargs):
        """
        Retourne les détails d'un utilisateur spécifique.
        Cette description apparaît dans le schéma OpenAPI généré.
        """
        return super().retrieve(request, *args, **kwargs)

Plus besoin de dupliquer les descriptions dans une configuration séparée : la docstring fait office de documentation.


Nouveau mécanisme requires_context pour les validateurs

Les validateurs et les champs qui ont besoin d’accéder au contexte du serializer utilisent désormais un attribut de classe requires_context = True plutôt qu’une inspection de signature. C’est plus explicite et plus robuste.

class UniqueForDateValidator:
    requires_context = True

    def __call__(self, value, serializer_field):
        # serializer_field.context donne accès à la requête,
        # à la vue, et au serializer parent
        request = serializer_field.context.get('request')
        ...

Le même mécanisme s’applique aux champs avec des valeurs par défaut dynamiques qui dépendent du contexte.


Dernière version pour Python 3.5 et Django 1.11

DRF 3.11 est la dernière version à supporter Python 3.5 (fin de vie en septembre 2020) et Django 1.11 (fin de vie LTS en avril 2020). Si tu es encore sur ces versions, c’est le moment de planifier la migration.


É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

DRF 3.11 est une mise à jour qu’on installe sereinement lors d’une migration vers Django 3.0. Les améliorations OpenAPI rendent la documentation d’API plus automatique, et le nouveau mécanisme requires_context clarifie un pattern qui était jusqu’ici implicite. Une version solide qui ferme proprement la compatibilité avec des versions de Python et Django en fin de vie.

Django REST Framework 3.9
OpenAPI et permissions composables