4 Punkte von GN⁺ 2025-12-11 | Noch keine Kommentare. | Auf WhatsApp teilen
  • Django 6.0 feiert das 20-jährige Bestehen des Frameworks und ist ein bedeutendes Release mit umfangreichen Verbesserungen in zentralen Bereichen wie Templates, Hintergrundaufgaben, Sicherheit und E-Mail-Verarbeitung.
  • Mit Template partials ist die Codewiederverwendung in Templates deutlich einfacher geworden und die Integration mit Tools wie htmx wurde verbessert.
  • Ein neues Tasks Framework wurde eingeführt, um Hintergrundaufgaben außerhalb des HTTP-Anfrageantwort-Zyklus auszuführen.
  • Mit der eingebauten Content Security Policy (CSP)-Unterstützung wird der Schutz vor Content-Injection-Angriffen wie XSS deutlich vereinfacht.
  • Durch die Modernisierung der E-Mail-API, ORM-Optimierungen und die Erweiterung des Primärschlüssels wurden die Entwicklererfahrung und Skalierbarkeit stark verbessert.

Überblick zu Django 6.0

  • Django 6.0 ist eine neue Version des Python-Webframeworks und setzt 20 Jahre Entwicklung fort.
  • Die wichtigsten Änderungen konzentrieren sich auf vier Kernbereiche: Templates, Hintergrundaufgaben, Sicherheit und E-Mail-Verarbeitung.
  • Die Veröffentlichung basiert auf Beiträgen zahlreicher Community-Mitwirkender und den zentralen Verbesserungen aus den offiziellen Release Notes.

Das django-upgrade-Tool

  • Beim Upgrade bestehender Projekte von Django 5.2 oder älter kann das django-upgrade-Tool für eine automatische Codeumstellung genutzt werden.
  • Django 6.0 enthält fünf automatische Fixer und behebt so einige Warnungen automatisch.

Template partials

  • Das neue Feature Template-Teildefinition ({% partialdef %}) reduziert Duplikate im Template-Code und verbessert die Wiederverwendbarkeit.
    • Ein im selben Template definiertes Partial kann mehrfach aufgerufen werden.
    • Mit der Option inline kann die Definition direkt beim Rendern erfolgen.
  • Über Teil-Rendering kann nur ein bestimmter Partial unabhängig gerendert werden.
    • Im Beispiel wird der Abschnitt view_count mit htmx periodisch aktualisiert.
    • Durch Anhängen von #partial_name an die URL lässt sich nur ein bestimmter Teil rendern.
  • Dieses Feature wurde über das Google Summer of Code-Projekt in Django integriert und basiert auf dem bisherigen Paket django-template-partials.

Tasks Framework

  • Django erhält ein neues Task-Framework für die Ausführung von Hintergrundaufgaben.
    • Code kann außerhalb des HTTP-Anfrageantwort-Zyklus ausgeführt werden.
    • Einsatzmöglichkeiten sind etwa E-Mails senden, Daten verarbeiten oder Berichte erstellen.
  • Aufgaben werden mit dem @task-Decorator definiert und über Task.enqueue() in eine Queue eingereiht.
  • Standardmäßig stehen zwei Backends zur Verfügung: ImmediateBackend und DummyBackend für die Entwicklung.
    • Für django-tasks-Pakete kann mit DatabaseBackend eine Ausführung auf Basis einer SQL-Datenbank genutzt werden.
  • Mit dem Befehl db_worker wird ein Task-Worker gestartet; der Fortschritt ist über Logs einsehbar.
  • Die Idee stammt aus Wagtail und wurde nach dem Vorschlag DEP 0014 in Django übernommen.

Support für Content Security Policy (CSP)

  • Django 6.0 unterstützt den CSP-Standard nativ, wodurch der Schutz vor Content-Injection-Angriffen wie XSS deutlich verbessert wird.
    • Durch Hinzufügen von ContentSecurityPolicyMiddleware zu MIDDLEWARE wird CSP aktiviert.
    • Die Einstellungen SECURE_CSP und SECURE_CSP_REPORT_ONLY ermöglichen die Konfiguration von Richtlinien.
  • Durch nonce-basierte Sicherheit kann bei <script>- und <style>-Tags automatisch nonce="{{ csp_nonce }}" gesetzt werden.
    • Für jede Anfrage wird ein zufälliger Nonce erzeugt, sodass nur vertrauenswürdige Ressourcen ausgeführt werden.
  • CSP wurde nach einem Vorschlag von 2004 über das Paket django-csp umgesetzt und ist mit dieser Version nun offiziell integriert.

Update der E-Mail-API

  • Die E-Mail-Verarbeitung in Django wurde auf eine moderne Python-3.6-E-Mail-API umgestellt.
    • Intern kommt dabei die Klasse email.message.EmailMessage zum Einsatz.
    • Bestehende send_mail()- und EmailMessage-Schnittstellen bleiben erhalten.
  • Die neue API reduziert Fehler, verbessert die Sicherheit und verbessert die Verarbeitung von Inline-Anhängen.
  • Mit dem Objekt MIMEPart lassen sich Inline-Anhänge wie Bilder in HTML-Inhalten einfach hinzufügen.
  • Diese Änderung wurde 2024 vorgeschlagen und nach acht Monaten Entwicklung zusammengeführt.

Einschränkung von Positionsargumenten in der E-Mail-API

  • In der django.core.mail-API wurden einige Parameter auf nur benannte Argumente (Keyword-Only) umgestellt.
    • Wird ein optionales Argument wie fail_silently als Positionsargument übergeben, erscheint eine Warnung.
    • Das dient der besseren Lesbarkeit und Wartbarkeit.
  • Das mail_api_kwargs-Fixer-Tool von django-upgrade kann die Anpassung automatisch übernehmen.

Erweiterter automatischer Import in der Shell

  • Die automatische Modellimport-Funktion aus Django 5.2 wurde erweitert, sodass jetzt auch settings, connection, models, functions und timezone automatisch importiert werden.
  • Mit ./manage.py shell -v 2 lässt sich die Liste der automatisch importierten Module anzeigen.
  • Dadurch verbessert sich die Entwicklerfreundlichkeit und wiederholender Code wird reduziert.

ORM-Verbesserung: Dynamische Feldaktualisierung nach save()

  • GeneratedField- und ausdrucksbasierte Felder werden nach einem save() automatisch aktualisiert.
    • In Datenbanken mit RETURNING-Unterstützung (SQLite, PostgreSQL, Oracle) geschieht das sofort.
    • In MySQL und MariaDB erfolgt die Aktualisierung per Lazy Loading.
  • Damit lassen sich aktuelle Werte sofort nutzen, ohne zusätzliche Abfragen zu senden.

Universelle StringAgg-Aggregatfunktion

  • Die StringAgg-Aggregate ist jetzt auf allen Datenbank-Backends verfügbar.
    • Sie gibt einen String mit Trennzeichen (delimiter) als Verbindung der Eingabewerte zurück.
    • Die Funktion war zuvor auf PostgreSQL beschränkt, kann jetzt aber direkt aus django.db.models genutzt werden.
  • Der Trennzeichenwert lässt sich mit dem Ausdruck Value() angeben.

BigAutoField als Standard

  • Der Standardwert von DEFAULT_AUTO_FIELD wurde auf BigAutoField geändert.
    • Durch 64-Bit-Ganzzahl-Primärschlüssel wird das Risiko von Primärschlüsselengpässen reduziert.
    • In neuen Projekten wird dies automatisch angewendet.
  • Die Konfiguration, die in Django 3.2 eingeführt wurde, wurde vereinfacht, wodurch weniger Boilerplate-Code nötig ist.

Template-Verbesserungen

  • Die Variable forloop.length wurde ergänzt, sodass die Gesamtlänge einer Schleife direkt abrufbar ist.
    • Einsatzbeispiel: {{ forloop.counter }}/{{ forloop.length }}
  • Verbesserungen am querystring-Template-Tag.
    • Bei leerem Mapping wird automatisch ? ergänzt, damit sich Links konsistent verhalten.
    • Die Kombination mehrerer Mapping-Argumente wird unterstützt, wodurch Query-Parameter leichter zusammengesetzt werden können.

Abschluss

  • An Django 6.0 haben 174 Mitwirkende teilgenommen.
  • Außerdem sind zahlreiche Optimierungen und Fehlerbehebungen enthalten.
  • Das Upgrade verbessert übergreifend Sicherheit, Wartbarkeit und Entwicklererfahrung (DX).
  • Zusätzliche Änderungen sind in den offiziellen Release Notes dokumentiert.

Noch keine Kommentare.

Noch keine Kommentare.