4 points par GN⁺ 2025-12-11 | Aucun commentaire pour le moment. | Partager sur WhatsApp
  • La version Django 6.0, qui fête son 20e anniversaire, est une sortie majeure qui améliore massivement des domaines clés comme les templates, les tâches en arrière-plan, la sécurité et les emails.
  • La fonction Template partials facilite la réutilisation du code au sein des templates, et l'intégration avec des outils comme htmx a été renforcée.
  • Le framework Tasks a été ajouté pour exécuter des travaux en arrière-plan en dehors du cycle de requête-réponse HTTP.
  • La Content Security Policy (CSP) est intégrée par défaut, ce qui simplifie la protection contre les attaques par injection de contenu comme le XSS.
  • La modernisation de l'API email, les améliorations de l'ORM et l'extension des clés primaires améliorent grandement l'expérience développeur et la scalabilité.

Vue d'ensemble de Django 6.0

  • Django 6.0 est la nouvelle version du framework web Python, qui poursuit 20 ans d'évolution.
  • Les changements principaux sont centrés sur quatre blocs clés : templates, tâches en arrière-plan, sécurité et traitement des emails.
  • Plusieurs contributeurs de la communauté ont participé, et les améliorations majeures sont récapitulées d'après les notes de release officielles.

Outil django-upgrade

  • Lors d'une montée de version d'un projet existant de Django 5.2 ou inférieur, l'outil django-upgrade permet une conversion automatique du code.
  • Il inclut 5 fixers automatiques liés à Django 6.0 et résout automatiquement certains avertissements.

Template partials

  • La fonctionnalité définition de partie de template ({% partialdef %}) a été ajoutée pour réduire la duplication de code dans les templates et permettre la réutilisation.
    • Un partial défini dans le même template peut être appelé plusieurs fois.
    • L'option inline permet de le rendre en même temps qu'au moment de sa définition.
  • La fonction de rendu partiel permet de rendre indépendamment un seul partial.
    • Dans l'exemple, htmx est utilisé pour actualiser périodiquement la partie view_count.
    • En ajoutant #partial_name à l'URL, seul un fragment précis peut être rendu.
  • Cette fonctionnalité a été intégrée à Django via un projet Google Summer of Code et provient du package existant django-template-partials.

Framework Tasks

  • Django a ajouté un framework Tasks pour l'exécution de tâches en arrière-plan.
    • Possibilité d'exécuter du code en dehors du cycle de requête-réponse HTTP.
    • Utilisable pour des tâches asynchrones comme l'envoi d'emails, le traitement de données ou la génération de rapports.
  • Définir une tâche avec le décoreur @task, l'enregistrer dans une file avec Task.enqueue().
  • Les backends fournis par défaut sont ImmediateBackend et DummyBackend à destination du développement, et l'utilisation de DatabaseBackend du package django-tasks permet une exécution basée sur une base SQL.
  • Exécuter un worker avec la commande db_worker, et vérifier l'état via les logs.
  • Cette fonctionnalité provient d'une idée lancée dans Wagtail et a été intégrée à Django après la proposition DEP 0014.

Support de Content Security Policy (CSP)

  • Django 6.0 prend en charge nativement la norme CSP pour renforcer la défense contre des attaques d'injection de contenu comme le XSS.
    • Ajouter ContentSecurityPolicyMiddleware à MIDDLEWARE pour l'activer.
    • Les paramètres SECURE_CSP et SECURE_CSP_REPORT_ONLY permettent de configurer la politique.
  • Une sécurité basée sur le nonce est intégrée, ce qui permet d'ajouter l'attribut nonce="{{ csp_nonce }}" aux balises <script> et <style>.
    • Un nonce aléatoire est généré à chaque requête et seules les ressources de confiance sont exécutées.
  • Le CSP, proposé en 2004, était implémenté via le package django-csp et devient officiellement intégré dans cette version.

Mise à jour de l'API email

  • La logique d'email de Django est passée à l'API email moderne de Python 3.6.
    • Elle utilise en interne la classe email.message.EmailMessage.
    • Les interfaces existantes send_mail() et EmailMessage restent inchangées.
  • La nouvelle API offre notamment une réduction des bugs, une meilleure sécurité et une amélioration du traitement des pièces jointes inline.
  • Avec l'objet MIMEPart, il est simple d'ajouter des pièces jointes inline comme des images dans le corps HTML.
  • Cette modification a été proposée en 2024 et fusionnée après 8 mois de développement.

Restriction des arguments positionnels de l'API email

  • Dans l'API django.core.mail, certains paramètres sont désormais acceptés uniquement en arguments nommés.
    • Si des paramètres optionnels comme fail_silently sont passés positionnellement, un avertissement est affiché.
    • C'est une mesure destinée à améliorer la lisibilité et la maintenabilité.
  • Correction automatique possible via le fixer mail_api_kwargs de django-upgrade.

Extension de l'import automatique dans le shell

  • La fonctionnalité d'import automatique des modèles de Django 5.2 est étendue, avec import automatique de settings, connection, models, functions, timezone.
  • La liste des imports automatiques est visible avec ./manage.py shell -v 2.
  • Cela améliore la commodité de développement et réduit le code répétitif.

Amélioration de l'ORM : mise à jour dynamique des champs lors de save()

  • Les champs GeneratedField ou basés sur des expressions sont mis à jour automatiquement après save().
    • Sur les DB supportant la clause RETURNING (SQLite, PostgreSQL, Oracle), la mise à jour est immédiate.
    • Sur MySQL et MariaDB, elle est effectuée en chargement différé.
  • Il est possible d'utiliser immédiatement la valeur la plus récente sans requête supplémentaire, ce qui améliore l'efficacité.

Fonction d'agrégation StringAgg universelle

  • La fonction d'agrégation StringAgg est disponible sur tous les backends de bases de données.
    • Elle renvoie une chaîne obtenue en concaténant les valeurs avec un séparateur (delimiter).
    • Fonctionalité qui était auparavant spécifique à PostgreSQL, elle est désormais accessible directement depuis django.db.models.
  • Le séparateur peut être spécifié via l'expression Value().

BigAutoField par défaut

  • La valeur par défaut de DEFAULT_AUTO_FIELD a été changée en BigAutoField.
    • Utilisation d'une clé primaire d'entiers 64 bits pour prévenir la exhaustion des clés primaires.
    • Sur les nouveaux projets, l'application est automatique sans configuration supplémentaire.
  • La configuration introduite par Django 3.2 est simplifiée, ce qui réduit la surcharge de configuration.

Améliorations du template

  • La variable forloop.length a été ajoutée pour accéder à la longueur totale d'une boucle.
    • Utilisation sous la forme {{ forloop.counter }}/{{ forloop.length }}.
  • Le tag template querystring est amélioré.
    • Ajout automatique de ? quand le mapping est vide, pour garantir une cohérence de comportement des liens.
    • Support de la fusion de plusieurs arguments de mapping pour faciliter la combinaison des paramètres de requête.

Conclusion

  • Django 6.0 a rassemblé 174 contributeurs, avec de nombreuses optimisations et corrections de bugs incluses.
  • La montée de version améliore globalement la sécurité, la maintenabilité et l'expérience développeur (DX).
  • Consultez les notes de release officielles pour les changements supplémentaires.

Aucun commentaire pour le moment.

Aucun commentaire pour le moment.