6 Punkte von GN⁺ 2025-12-05 | Noch keine Kommentare. | Auf WhatsApp teilen
  • Das Web-Framework Django 6.0 wurde veröffentlicht, unterstützt Python 3.12 oder höher und stärkt Sicherheit, Templates und asynchrone Funktionalitäten deutlich.
  • Die eingebaute Content Security Policy (CSP) ermöglicht Richtlinieneinstellungen, um Inhaltsinjektionen wie XSS besser abzuwehren.
  • Mit der Funktion Template Partials können wiederverwendbare Teile innerhalb von Templates definiert werden, wodurch die Code-Modularisierung verbessert wird.
  • Ein Background Tasks Framework wurde hinzugefügt und unterstützt die Ausführung asynchroner Aufgaben außerhalb des Anfrage-Antwort-Zyklus.
  • Die Einführung der modernen Python-E-Mail-API, das Ende des Supports für MariaDB 10.5 und die Änderung des Standardwerts von DEFAULT_AUTO_FIELD sorgen für Kompatibilitätsanpassungen und Modernisierung.

Python-Kompatibilität

  • Django 6.0 unterstützt Python 3.12, 3.13, 3.14; pro Serie wird nur der jeweils neueste Release offiziell unterstützt.
  • Django 5.2.x ist die letzte Version, die Python 3.10 und 3.11 unterstützt.
  • Nach Django 6.0 wird empfohlen, dass Drittanbieter-Apps den Support für Versionen vor Django 5.2 aufgeben.

Wichtige neue Funktionen

Unterstützung für Content Security Policy (CSP)

  • Django enthält den CSP-Standard, wodurch der Schutz vor Inhaltsinjektionen wie XSS deutlich verbessert wird.
    • Über ContentSecurityPolicyMiddleware, den csp()-Kontextprozessor und die Einstellung SECURE_CSP lassen sich Richtlinien definieren.
    • Klar definierte und sichere Richtlinienkonfigurationen werden durch Python-Dictionary-basierte Einstellungen unterstützt.
  • Mit SECURE_CSP_REPORT_ONLY kann ein Überwachungsmodus gesetzt werden.
  • Es gibt einen Dekorator, mit dem Richtlinien pro View überschrieben oder deaktiviert werden können.

Template Partials

  • Tags partialdef und partial wurden hinzugefügt, mit denen definierbare Template-Fragmente erstellt und wiederverwendet werden können.
  • Mit der Syntax template_name#partial_name können get_template(), render() und {% include %} direkt auf Teile verweisen.
  • Für Nutzer des Drittanbieterpakets django-template-partials steht eine Migrationsanleitung bereit.

Background Tasks Framework

  • Django erhält ein eingebautes Framework für die Ausführung asynchroner Aufgaben.
    • HTTP-Anfragen und -Antworten werden dabei nicht Teil des Aufrufpfads; E-Mail-Versand oder Datenverarbeitung sind ebenfalls möglich.
    • Aufgaben werden mit dem @task-Dekorator definiert und per enqueue() in die Queue eingereiht.
  • Das Backend wird über die Einstellung TASKS festgelegt; es sind zwei Standard-Backends für Entwicklung und Test enthalten.
  • Django übernimmt nur die Erstellung und das Enqueueing von Aufgaben, die Ausführung erfolgt durch externe Worker-Prozesse.

Übernahme der modernen Python-E-Mail-API

  • Die E-Mail-Verarbeitung in Django nutzt jetzt die moderne E-Mail-API von Python ab Version 3.6 (email.message.EmailMessage).
  • Die bisherigen Klassen SafeMIMEText und SafeMIMEMultipart sind veraltet.
  • Der Rückgabetyp von EmailMessage.message() wurde auf eine Instanz von Pythons EmailMessage geändert.

Detaillierte Verbesserungen

Admin

  • Das Icon-Set Font Awesome Free 6.7.2 wird verwendet.
  • Über die Eigenschaft AdminSite.password_change_form kann das Formular für Passwortänderungen im Adminbereich angepasst werden.
  • Für messages.DEBUG und messages.INFO wurden eigene Icons und CSS-Stile eingeführt.

Auth

  • Die Anzahl der Hash-Wiederholungen für PBKDF2 wurde von 1.000.000 auf 1.200.000 erhöht.

GIS

  • Die Eigenschaft GEOSGeometry.hasm erlaubt die Prüfung, ob eine M-Dimension vorhanden ist.
  • Die Funktion Rotate unterstützt Rotation um einen angegebenen Winkel.
  • Über die Eigenschaft BaseGeometryWidget.base_layer ist eine Anpassung der Kartenkachel-Anbieter möglich.
  • Ab MariaDB 12.0.1 werden coveredby, isvalid, GeoHash und IsValid unterstützt.
  • Beim Widget-Rendering wurde Inline-JavaScript entfernt; für Anpassungen ist eine Template-Anpassung erforderlich.

PostgreSQL

  • Mit Lexeme-Expressionen wird die Steuerung von Volltext-Suchanfragen verbessert.
  • Der Parameter hints wurde bei Erweiterungsoperationen wie CreateExtension hinzugefügt.
  • Für Felder, Indizes und Constraints in django.contrib.postgres wurden Systemprüfungen ergänzt.

Staticfiles

  • ManifestStaticFilesStorage sorgt für konsistente Pfadsortierung und reduziert unnötige Diffs.
  • Der Befehl collectstatic gibt standardmäßig nur eine Zusammenfassung aus; Detailinformationen werden erst ab --verbosity 2 angezeigt.

Sonstiges

  • Unterstützung für die Sprache Haitian Creole hinzugefügt.
  • Die Kommandos startproject und startapp erzeugen nicht vorhandene Verzeichnisse automatisch.
  • Beim shell-Befehl werden Standard-Utilities wie django.conf.settings automatisch importiert.
  • Migrationen unterstützen die Serialisierung von zoneinfo.ZoneInfo.
  • Neue Aggregate-Funktionen wie StringAgg und AnyValue wurden hinzugefügt.
  • Mit AsyncPaginator und AsyncPage steht asynchrone Pagination zur Verfügung.
  • In ASGI-Umgebungen wird die Unterstützung für mehrere Cookie-Header in HTTP/2 ergänzt.
  • In Templates wurde die Variable forloop.length ergänzt und der querystring-Tag verbessert.
  • DiscoverRunner unterstützt parallelisierte Tests im forkserver-Modus.

Inkompatible Änderungen

Datenbank-Backend-API

  • BaseDatabaseSchemaEditor und das PostgreSQL-Backend nutzen bei der Spaltelöschung nicht mehr CASCADE.
  • Umbenennung von Methoden wie return_insert_columns() zu returning_columns().
  • Bei Unterstützung von UPDATE … RETURNING kann DatabaseFeatures.can_return_rows_from_update=True gesetzt werden.

Eingestellte Unterstützung

  • Ende der Unterstützung für MariaDB 10.5 (erforderlich ist 10.6+).
  • Ende der Unterstützung für Python < 3.12.
    • Mindestversionen wichtiger Bibliotheken: aiosmtpd 1.4.5, bcrypt 4.1.1, Pillow 10.1.0, psycopg 3.1.12 usw.

E-Mail

  • Entfernen der Eigenschaften mixed_subtype, alternative_subtype und encoding.
  • Aufgrund interner Änderungen ist eine Überprüfung von benutzerdefinierten EmailMessage-Unterklassen erforderlich.

Änderung des Standardwerts von DEFAULT_AUTO_FIELD

  • Der Standardwert wurde von AutoField auf BigAutoField geändert.
  • Projekte, die die Warnung seit Django 3.2 (models.W042) nicht behoben haben, müssen die Konfiguration ergänzen.

ORM-Ausdrücke

  • Die Rückgabeparameter von as_sql() müssen im Tuple-Format vorliegen.

Sonstiges

  • Bei JSON-Serialisierung wird stets ein Zeilenumbruch hinzugefügt.
  • Mindestversion von asgiref auf 3.9.1 angehoben.

In Kürze zu entfernende Funktionen

django.core.mail API

  • Bei get_connection(), send_mail() usw. sollten optionale Argumente nur noch als Schlüsselwortargumente übergeben werden.
  • Bei der Erstellung von EmailMessage und EmailMultiAlternatives sind nur die ersten vier Argumente positional erlaubt; alle anderen nur als Schlüsselwortargumente.

Sonstiges

  • BaseDatabaseCreation.create_test_db(serialize) veraltet, verwenden Sie serialize_db_to_string().
  • StringAgg und OrderableAggMixin nur für PostgreSQL entfallen.
  • Das Standardprotokoll von urlize und urlizetrunc wechselt in Django 7.0 auf HTTPS.
  • ADMINS und MANAGERS müssen als Liste von E-Mail-Strings angegeben werden, statt als Tupel aus (Name, Adresse).
  • Entfall von E-Mail-bezogenen Klassen wie SafeMIMEText, SafeMIMEMultipart und BadHeaderError.

Entfernte Funktionen

  • Positionsargument-Unterstützung von BaseConstraint entfernt.
  • Entfernung von DjangoDivFormRenderer und Jinja2DivFormRenderer.
  • Entfall der Unterstützung für den Datenbanktreiber cx_Oracle.
  • Standard-Schema von forms.URLField: von "http" auf "https" geändert.
  • Positionsargumente von Model.save() und Model.asave() entfernt.
  • ModelAdmin.log_deletion() und LogEntryManager.log_action() entfernt.
  • Modul django.utils.itercompat entfernt.
  • Methoden GeoIP2.coords() und GeoIP2.open() entfernt.
  • Entfernen von ForeignObject.get_joining_columns() und zugehörigen Methoden.

Django 6.0 erhöht durch Sicherheitsverbesserungen, asynchrone Verarbeitung und die Einführung einer modernen E-Mail-API sowohl die Stabilität als auch die Skalierbarkeit des Frameworks und definiert den klaren Übergang auf Python 3.12+.

Noch keine Kommentare.

Noch keine Kommentare.