6 points par GN⁺ 2025-12-05 | Aucun commentaire pour le moment. | Partager sur WhatsApp
  • La version 6.0 du framework web Django a été publiée, avec prise en charge de Python 3.12+, et un renforcement massif de la sécurité, des templates et des capacités asynchrones
  • La Content Security Policy (CSP) est désormais intégrée, ce qui permet de configurer des politiques pour protéger contre les attaques par injection de contenu, dont le XSS
  • La fonctionnalité Template Partials permet de définir des parties réutilisables dans les templates, améliorant la modularité du code
  • Un framework Background Tasks a été ajouté pour prendre en charge l’exécution de tâches asynchrones en dehors du cycle requête-réponse
  • L’adoption d’une API email Python plus récente, la fin du support de MariaDB 10.5 et le changement de la valeur par défaut DEFAULT_AUTO_FIELD permettent d’effectuer des ajustements de compatibilité et de modernisation

Compatibilité Python

  • Django 6.0 prend en charge Python 3.12, 3.13 et 3.14, avec un support officiel limité aux dernières versions de chaque série
  • Django 5.2.x est la dernière version à prendre en charge Python 3.10 et 3.11
  • À partir de Django 6.0, il est recommandé aux applications tierces d’arrêter le support des versions antérieures à Django 5.2

Principales nouveautés

Prise en charge de Content Security Policy (CSP)

  • La norme CSP est intégrée à Django pour renforcer la protection contre les attaques par injection de contenu comme le XSS
    • Il est possible de définir des politiques via ContentSecurityPolicyMiddleware, le context processor csp() et le paramètre SECURE_CSP
    • Les paramètres basés sur des dictionnaires Python permettent une définition claire et sûre des politiques
  • Le mode de surveillance peut être défini via SECURE_CSP_REPORT_ONLY
  • Des décorateurs sont proposés pour redéfinir ou désactiver la politique par vue

Template Partials

  • Ajout des balises partialdef et partial pour définir et réutiliser des fragments de template
  • Le motif template_name#partial_name permet de les référencer directement dans get_template(), render() et {% include %}
  • Un guide de migration est fourni pour les utilisateurs du package tiers django-template-partials

Framework de tâches d’arrière-plan

  • Ajout d’un framework intégré à Django pour l’exécution de tâches asynchrones
    • L’envoi d’e-mails, le traitement de données, etc. peut être effectué en dehors du cycle requête-réponse HTTP
    • Les tâches sont définies avec le décorateur @task et enregistrées dans la file via enqueue()
  • Le backend est spécifié avec TASKS, avec deux backends intégrés par défaut pour le développement et les tests
  • Django ne gère que la création et la mise en file des tâches ; l’exécution doit être réalisée par des processus worker externes

Adoption d’une API email Python plus récente

  • La logique de traitement des e-mails de Django a été migrée vers la moderne API email de Python (à partir de Python 3.6), email.message.EmailMessage
  • Les anciennes classes SafeMIMEText et SafeMIMEMultipart ne sont plus utilisées
  • Le type de retour de EmailMessage.message() est désormais une instance EmailMessage de Python

Améliorations détaillées

Admin

  • Application du jeu d’icônes Font Awesome Free 6.7.2
  • Possibilité de personnaliser le formulaire de changement de mot de passe de l’admin via l’attribut AdminSite.password_change_form
  • Des icônes et des styles CSS distincts ont été appliqués à messages.DEBUG et messages.INFO

Auth

  • Le nombre d’itérations de hachage PBKDF2 passe de 1 000 000 à 1 200 000

GIS

  • L’attribut GEOSGeometry.hasm permet de vérifier la présence de la dimension M
  • La fonction Rotate prend en charge la rotation à l’angle indiqué
  • Le fournisseur de tuiles de carte peut être personnalisé via l’attribut BaseGeometryWidget.base_layer
  • À partir de MariaDB 12.0.1, prise en charge de coveredby, isvalid, GeoHash, IsValid, etc.
  • Le JavaScript inline est supprimé lors du rendu des widgets, une modification de template est nécessaire en cas de personnalisation

PostgreSQL

  • Les expressions Lexeme sont ajoutées pour renforcer le contrôle de la recherche en texte intégral
  • Ajout du paramètre hints aux opérations relatives aux extensions, dont CreateExtension
  • Ajout de contrôles système pour les champs, index et contraintes liés à django.contrib.postgres

Staticfiles

  • ManifestStaticFilesStorage garantit une cohérence dans le tri des chemins, réduisant les diffs inutiles
  • La commande collectstatic affiche par défaut uniquement un résumé, les détails s’affichent à partir de --verbosity 2

Divers

  • Ajout de la prise en charge du créole haïtien
  • Les commandes startproject et startapp créent automatiquement les répertoires inexistants
  • La commande shell importe automatiquement des utilitaires par défaut tels que django.conf.settings
  • Prise en charge de la sérialisation de zoneinfo.ZoneInfo dans les migrations
  • Ajout de nouvelles fonctions d’agrégation telles que StringAgg, AnyValue
  • Prise en charge de la pagination asynchrone via AsyncPaginator et AsyncPage
  • Prise en charge de multiples en-têtes Cookie HTTP/2 en environnement ASGI
  • Ajout de la variable forloop.length dans les templates, amélioration de la balise querystring
  • DiscoverRunner prend en charge les tests parallèles en mode forkserver

Modifications non rétrocompatibles

API du backend de base de données

  • BaseDatabaseSchemaEditor et le backend PostgreSQL arrêtent d’utiliser CASCADE lors de la suppression de colonnes
  • Changement de noms de méthodes, dont return_insert_columns()returning_columns()
  • Lorsque la prise en charge de UPDATE … RETURNING est activée, il est possible de configurer DatabaseFeatures.can_return_rows_from_update=True

Suppressions de prise en charge

  • Fin du support de MariaDB 10.5 (requiert 10.6+)
  • Fin du support des versions de Python inférieures à 3.12
    • Versions minimales requises pour les principales bibliothèques : aiosmtpd 1.4.5, bcrypt 4.1.1, Pillow 10.1.0, psycopg 3.1.12, etc.

Email

  • Suppression des attributs mixed_subtype, alternative_subtype, encoding
  • En raison d’un changement d’implémentation interne, vérification des sous-classes personnalisées d’EmailMessage nécessaire

Changement de la valeur par défaut de DEFAULT_AUTO_FIELD

  • La valeur par défaut passe de AutoField à BigAutoField
  • Les projets n’ayant pas géré l’avertissement models.W042 depuis Django 3.2 doivent ajouter la configuration

Expressions ORM

  • Les paramètres retournés par la méthode as_sql() doivent être de type tuple

Divers

  • Ajout systématique d’un saut de ligne lors de la sérialisation JSON
  • Version minimale d’asgiref portée à 3.9.1

Fonctionnalités obsolètes prévues

API django.core.mail

  • Pour get_connection(), send_mail(), etc., les arguments optionnels doivent être transmis uniquement via des arguments nommés
  • Lors de la création d’EmailMessage et d’EmailMultiAlternatives, seuls des arguments nommés sont autorisés après les 4 premiers paramètres

Divers

  • Dépréciation de BaseDatabaseCreation.create_test_db(serialize) remplacé par serialize_db_to_string()
  • Dépréciation des classes PostgreSQL StringAgg, OrderableAggMixin
  • Le protocole par défaut de urlize et urlizetrunc passera à HTTPS dans Django 7.0
  • Les paramètres ADMINS et MANAGERS doivent être fournis sous forme de listes de chaînes d’e-mail au lieu de tuples (nom, adresse)
  • Dépréciation des classes liées aux e-mails, notamment SafeMIMEText, SafeMIMEMultipart, BadHeaderError

Fonctionnalités supprimées

  • Suppression du support des arguments positionnels de BaseConstraint
  • Suppression de DjangoDivFormRenderer et Jinja2DivFormRenderer
  • Suppression du support du pilote de base de données cx_Oracle
  • Le schéma par défaut de forms.URLField passe de "http" à "https"
  • Suppression du support des arguments positionnels de Model.save() et Model.asave()
  • Suppression de ModelAdmin.log_deletion() et LogEntryManager.log_action()
  • Suppression du module django.utils.itercompat
  • Suppression des méthodes GeoIP2.coords() et GeoIP2.open()
  • Suppression de ForeignObject.get_joining_columns() et des méthodes associées

Django 6.0 renforce la robustesse et la scalabilité du framework grâce à la sécurité, au traitement asynchrone et à l’adoption d’une API email moderne, et clarifie la transition vers un environnement Python 3.12+.

Aucun commentaire pour le moment.

Aucun commentaire pour le moment.