Sortie de Django 6
(docs.djangoproject.com)- 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_FIELDpermettent 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 processorcsp()et le paramètreSECURE_CSP - Les paramètres basés sur des dictionnaires Python permettent une définition claire et sûre des politiques
- Il est possible de définir des politiques via
- 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
partialdefetpartialpour définir et réutiliser des fragments de template - Le motif
template_name#partial_namepermet de les référencer directement dansget_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
@tasket enregistrées dans la file viaenqueue()
- 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
SafeMIMETextetSafeMIMEMultipartne sont plus utilisées - Le type de retour de
EmailMessage.message()est désormais une instanceEmailMessagede 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.DEBUGetmessages.INFO
Auth
- Le nombre d’itérations de hachage PBKDF2 passe de 1 000 000 à 1 200 000
GIS
- L’attribut
GEOSGeometry.hasmpermet de vérifier la présence de la dimension M - La fonction
Rotateprend 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
hintsaux opérations relatives aux extensions, dontCreateExtension - Ajout de contrôles système pour les champs, index et contraintes liés à
django.contrib.postgres
Staticfiles
ManifestStaticFilesStoragegarantit une cohérence dans le tri des chemins, réduisant les diffs inutiles- La commande
collectstaticaffiche 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
startprojectetstartappcréent automatiquement les répertoires inexistants - La commande
shellimporte automatiquement des utilitaires par défaut tels quedjango.conf.settings - Prise en charge de la sérialisation de
zoneinfo.ZoneInfodans les migrations - Ajout de nouvelles fonctions d’agrégation telles que
StringAgg,AnyValue - Prise en charge de la pagination asynchrone via
AsyncPaginatoretAsyncPage - Prise en charge de multiples en-têtes
CookieHTTP/2 en environnement ASGI - Ajout de la variable
forloop.lengthdans les templates, amélioration de la balisequerystring DiscoverRunnerprend en charge les tests parallèles en modeforkserver
Modifications non rétrocompatibles
API du backend de base de données
BaseDatabaseSchemaEditoret le backend PostgreSQL arrêtent d’utiliserCASCADElors de la suppression de colonnes- Changement de noms de méthodes, dont
return_insert_columns()→returning_columns() - Lorsque la prise en charge de
UPDATE … RETURNINGest activée, il est possible de configurerDatabaseFeatures.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.
- Versions minimales requises pour les principales bibliothèques :
- 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’
EmailMessagené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.W042depuis 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’
asgirefporté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’
EmailMessageet 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é parserialize_db_to_string() - Dépréciation des classes PostgreSQL
StringAgg,OrderableAggMixin - Le protocole par défaut de
urlizeeturlizetruncpassera à HTTPS dans Django 7.0 - Les paramètres
ADMINSetMANAGERSdoivent ê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
DjangoDivFormRendereretJinja2DivFormRenderer - Suppression du support du pilote de base de données
cx_Oracle - Le schéma par défaut de
forms.URLFieldpasse de"http"à"https" - Suppression du support des arguments positionnels de
Model.save()etModel.asave() - Suppression de
ModelAdmin.log_deletion()etLogEntryManager.log_action() - Suppression du module
django.utils.itercompat - Suppression des méthodes
GeoIP2.coords()etGeoIP2.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.