Training Menu

Utiliser le module typing en Django pour un code plus robuste et lisible

Donald Porgrammeur
Donald Porgrammeur
March 24, 2025 · 6.00 min read
0
Django
Utiliser le module typing en Django pour un code plus robuste et lisible

Voici un article complet sur Django avec le module typing, adapté aux développeurs qui souhaitent améliorer la lisibilité, la maintenabilité et la robustesse de leur code Django.

🔍 Introduction

Le framework Django est largement utilisé pour le développement d'applications web. Toutefois, comme Python est un langage dynamiquement typé, les erreurs de type ne sont détectées qu’à l’exécution, ce qui peut entraîner des bugs difficiles à tracer.

Avec le module typing, Python (à partir de la version 3.5+) permet d’ajouter des annotations de type statique. Ces annotations ne changent pas le comportement du programme, mais elles sont très utiles pour :

  • la documentation du code,
  • les vérifications statiques avec des outils comme mypy,
  • les éditeurs intelligents (type hinting, auto-complétion),
  • la collaboration entre développeurs.

Dans cet article, nous verrons comment appliquer le module typing dans un projet Django : dans les vues, les modèles, les serializers et les fonctions utilitaires.


🧩 1. Typage dans les fonctions utilitaires

Avant :

def calculate_discount(price, rate):
    return price - (price * rate)

Après (avec typing) :

from typing import Union

def calculate_discount(price: float, rate: float) -> float:
    return price - (price * rate)

Ici, on sait clairement que la fonction prend deux float et retourne un float.


📦 2. Typage dans les modèles Django

On peut utiliser le module typing pour améliorer la lisibilité dans les méthodes de modèles :

from typing import Optional
from django.db import models

class Product(models.Model):
    name = models.CharField(max_length=255)
    price = models.FloatField()

    def get_discounted_price(self, discount: float) -> float:
        return self.price * (1 - discount)

    def __str__(self) -> str:
        return self.name

🌐 3. Typage dans les vues Django

Typage pour les vues basées sur fonctions (FBV) :

from typing import Any
from django.http import HttpRequest, HttpResponse

def home_view(request: HttpRequest) -> HttpResponse:
    return HttpResponse("Bienvenue sur notre site.")

Typage pour les vues basées sur classes (CBV) :

from typing import Any
from django.views import View
from django.http import HttpRequest, HttpResponse

class ContactView(View):
    def get(self, request: HttpRequest, *args: Any, **kwargs: Any) -> HttpResponse:
        return HttpResponse("Page de contact")

🛠️ 4. Typage avec les serializers Django REST Framework

from typing import Any
from rest_framework import serializers
from .models import Product

class ProductSerializer(serializers.ModelSerializer):
    class Meta:
        model = Product
        fields = ['id', 'name', 'price']

    def validate_price(self, value: Any) -> float:
        if value < 0:
            raise serializers.ValidationError("Le prix ne peut pas être négatif.")
        return value

🧪 5. Typage dans les tests

from typing import Any
from django.test import TestCase
from .models import Product

class ProductTestCase(TestCase):
    def test_discount(self) -> None:
        product = Product.objects.create(name="Chaussure", price=100)
        discounted = product.get_discounted_price(0.2)
        self.assertEqual(discounted, 80.0)

🧰 6. Outils recommandés

  • mypy : outil pour vérifier les types statiques
    pip install mypy

  • pyright : excellent support intégré à VS Code

  • ruff : combine linting et vérification de types


📚 Conclusion

Utiliser le module typing dans Django est une bonne pratique qui améliore la qualité du code sans modifier son comportement. Cela rend votre code plus maintenable, compréhensible, et facilite la collaboration entre développeurs. Même si Django ne l’impose pas, c’est un standard moderne que toute équipe devrait adopter.

 

0

Applaudissez pour montrer votre soutien

Donald Porgrammeur

Donald Porgrammeur

5 Followers · Writer for Django

Tedom Noutchogouin Donald est Software Architect, DevOps Engineer et Machine Learning Engineer, fondateur de HooYia, une entreprise technologique spé… Read more