Date de sortie : 3 décembre 2025
Documentation officielle : Django 6.0 release notes
Django 6.0 marque un cap avec trois ajouts structurants : un framework de tâches en arrière-plan intégré, le support natif de Content Security Policy et les template partials. Python 3.12 minimum.
Les nouveautés principales
Tâches en arrière-plan intégrées
Plus besoin de Celery pour les cas simples. Django embarque maintenant un système de tâches :
from django.tasks import task
@task()
def send_welcome_email(user_id):
user = User.objects.get(id=user_id)
# ... envoyer l'email
# Mettre en file d'attente
send_welcome_email.enqueue(user_id=42)
Des backends de développement et de test sont fournis. Pour la production, des backends tiers s’intègreront avec Redis, RabbitMQ, etc.
Content Security Policy (CSP)
Framework complet pour gérer les en-têtes CSP :
# settings.py
MIDDLEWARE = [
# ...
"django.middleware.csp.ContentSecurityPolicyMiddleware",
]
# Utiliser les constantes Django
from django.conf.global_settings import CSP_SELF, CSP_NONE
CONTENT_SECURITY_POLICY = {
"default-src": [CSP_SELF],
"script-src": [CSP_SELF, "https://cdn.example.com"],
"style-src": [CSP_SELF],
}
Le context processor fournit automatiquement un nonce pour les scripts inline.
Template partials
Réutiliser des fragments de template sans créer de fichiers séparés :
{% partialdef user_card %}
<div class="card">
<h3>{{ user.name }}</h3>
<p>{{ user.email }}</p>
</div>
{% endpartialdef %}
{% partial "base.html#user_card" %}
Fonctionne aussi avec get_template(), render() et {% include %}. La syntaxe template_name#partial_name est intuitive et évite la prolifération de micro-templates.
Nouvelle API email Python
Django migre vers email.message.EmailMessage (la nouvelle API Python) :
from django.core.mail import EmailMessage
msg = EmailMessage(
subject="Bienvenue",
body="<h1>Hello</h1>",
from_email="[email protected]",
to=["[email protected]"],
)
msg.content_subtype = "html"
msg.send()
L’ancienne API avec SafeMIMEText/SafeMIMEMultipart est dépréciée.
Pagination asynchrone
Nouvelles classes AsyncPaginator et AsyncPage pour les vues async :
from django.core.paginator import AsyncPaginator
async def list_articles(request):
paginator = AsyncPaginator(Article.objects.all(), per_page=25)
page = await paginator.aget_page(request.GET.get("page"))
return render(request, "articles.html", {"page": page})
Autres améliorations
- AnyValue aggregate pour SQLite, MySQL, Oracle et PostgreSQL 16+
- Variable forloop.length dans les boucles de templates
- GeneratedField rafraîchi automatiquement après save (avec RETURNING)
- Font Awesome 6.7.2 dans l’admin
- MariaDB 10.5 abandonné
- DEFAULT_AUTO_FIELD passe a BigAutoField par défaut
É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
Django 6.0 est une release riche. Les tâches en arrière-plan intégrées répondent a un besoin récurrent, même si Celery restera indispensable pour les cas avancés. Le CSP natif et les template partials sont des ajouts pragmatiques qui vont simplifier beaucoup de projets. Python 3.12 minimum : vérifiez votre version avant de migrer.
Sources : Django 6.0 release notes, Adam Johnson - What’s new in 6.0