от DeepUltramarine(4-12-2025)

Django 6.0 беше официално пуснат на вчера, на 3 декември 2025г. и носи няколко значими подобрения, фокусирани върху сигурността, модулността и модерните Python практики. Това е основна версия (major release), която поддържа Python 3.12, 3.13 и 3.14. Тя заменя Django 5.2 като LTS (Long Term Support) версия, която ще получава ъпдейти до април 2028 г.

Ето ключовите нови функции и промени, базирани на официалните release notes:
Основни нови функции

  • Поддръжка за Content Security Policy (CSP): Вграден middleware, context processor и настройки (SECURE_CSP, SECURE_CSP_REPORT_ONLY) за защита срещу XSS и инжекции. Поддържа nonces и конфигурация чрез Python речници с Django константи. Това улеснява осигуряването на по-висока сигурност в уеб приложенията.
  • Template Partials: Нови тагове {% partialdef %} и {% partial %} за дефиниране и рендване на възстановими фрагменти от шаблони. Поддържа синтаксис template_name#partial_name за по-модулни и многократно използваеми шаблони.
  • Background Tasks framework: Вградена система за дефиниране, поставяне в опашката и обработка на задачи (напр. чрез декоратор @task). Поддържа външни работници и конфигурируеми backends чрез настройка TASKS. Това е голямо улеснение за асинхронни операции без външни библиотеки като Celery.
  • Модернизиран Email API: Използва email.message.EmailMessage класа на Python за по-чист и Unicode съвместим интерфейс. Заменя старите MIME класове; EmailMessage.message() връща модерен инстанс; добавена е поддръжка за policy аргумент и MIMEPart attachments.
    Това означава, че имената на прикачени файлове например, ще се показват коректно на кирилица, вместо странни символи и неразбираема кодировка.

  • Подобрения в сигурността
  • Увеличаване на итерациите за PBKDF2 password hash от 1,000,000 на 1,200,000 за по-добра защита.
  • Интеграцията с CSP подобрява защитата срещу XSS.

  • Важни промени, несъвместими с предни версии
  • Поддръжката за версии на Python по-малки от 3.12, MariaDB 10.5 и cx_Oracle е премахната.
  • DEFAULT_AUTO_FIELD сега по подразбиране е BigAutoField (предишно AutoField); шаблоните са актуализирани да не изискват изрично задаване.
  • Промени в Email API: Премахнати са legacy свойства, класове (SafeMIMEText, SafeMIMEMultipart) и изключения (BadHeaderError); позиционни аргументи за опционални параметри в django.core.mail са маркирани като deprecated.
  • В database backend: Преименувани методи (напр. return_insert_columns към returning_columns), премахната е fetch_returned_insert_columns, и повече не се използва CASCADE за drop на колони.
  • Премахната е поддръжката за позиционни аргументи в BaseConstraint, Model.save() и други методи.

  • Маркирани като deprecated функции (ще бъдат премахнати в бъдещи версии)
  • Позиционни аргументи в django.core.mail.
  • URLIZE_ASSUME_HTTPS (преходна настройка) и default HTTP в urlize/urlizetrunc (ще премине към HTTPS в Django 7.0).
  • ADMINS/MANAGERS в tuple формат (използвайте email стрингове с имена в кавички).
  • Процентни знаци в column aliases или annotations.
  • Legacy MIME поддръжка в attachments.
  • Различни ORM и database функции (напр. OrderableAggMixin, PostgreSQL StringAgg).

  • Премахнати функции (край на deprecation cycle)
  • Поддръжка за cx_Oracle, DjangoDivFormRenderer, Jinja2DivFormRenderer.
  • Методи като Prefetch.get_current_queryset(), get_prefetch_queryset(), GeoIP2.coords().
  • get_joining_columns(), ForeignObject.get_reverse_joining_columns().
  • check ключ в CheckConstraint, OS_OPEN_FLAGS в FileSystemStorage.

  • Какво означава това за разработчиците?
    За нови проекти: Django 6.0 е отличен избор с по-добра сигурност, модулност и вградени инструменти за задачи и шаблони. Ако започвате нещо ново, ъпгрейднете директно.
    За съществуващи проекти е добре да се провери за breaking changes, особено в email и database код. Използването на python -Wd за тестове, за да се видят deprecation предупрежденията. Препоръчително е да се ъпгрейдне от 5.2, като се следва ръководството за ъпгрейд.

    За подробен списък с промените и новостите можете да погледнете на https://docs.djangoproject.com/en/6.0/releases/6.0/.

    Източник: https://lwn.net/Articles/1049111/, както и официалните release notes, за допълнителна информация за промените.


    << | Потвърдено - ядро 6.18 ще бъде LTS >>