В Django 6.0 есть кое-что для вас. Давайте рассмотрим самые важные новые функции и изменения, о которых вам нужно знать.

Сообщество Django представляет множество мощных нововведений, а также некоторые критические изменения. Ожидаемый выпуск запланирован на декабрь 2025 года.

Что нового в Django 6.0
Изменений в версии 6.0 много... В этой статье мы подробно разберем нововведения Django 6.0 и выделим критические изменения, нарушающие обратную совместимость, на которые стоит обратить внимание.

Политика безопасности контента (CSP): Встроенные промежуточное ПО (middleware) и настройки для заголовков CSP с поддержкой nonce.

Одним из самых значительных нововведений в Django 6.0 является встроенная поддержка Политики безопасности контента. Используйте ContentSecurityPolicyMiddleware и применяйте nonce-значения через контекстный процессор csp().

Формируемый заголовок Content-Security-Policy

from django.utils.csp import CSP

SECURE_CSP = {
    "default-src": [CSP.SELF],
    "script-src": [CSP.SELF, CSP.NONCE],
    "img-src": [CSP.SELF, "https:"],
}

Это значительно упрощает защиту вашего веб-приложения от инъекций скриптов/стилей, межсайтового скриптинга (XSS) и связанных с ними уязвимостей.

Совет: При обновлении проверьте встроенные скрипты и стили и настройте разрешённые источники с помощью правил CSP.

Частичные шаблоны (Template Partials): Переиспользуемые фрагменты шаблонов

Django 6 представляет частичные шаблоны (partials) — это переиспользуемые именованные блоки внутри шаблонов. Вы определяете их с помощью тега {% partialdef %} и включаете с помощью {% partial %}.

Это позволяет вам модульно организовывать ваши шаблоны, избегая необходимости разбивать их на множество мелких файлов. Также вы можете ссылаться на частичные шаблоны, используя синтаксис template_name#partial_name.

Фреймворк Фоновых Задач (Background Tasks Framework): Новый декоратор @task и система очередей для асинхронных задач.

Ранее Django не включал встроенную систему задач или постановки заданий в очередь. Теперь в Django 6.0 вы получаете нативный фреймворк задач с использованием декоратора @task.

from django.core.mail import send_mail
from django.tasks import task


@task
def email_users(emails, subject, message):
    return send_mail(subject, message, None, emails)

Примечание: Django отвечает за определение и планирование задач, однако для их непосредственного выполнения вам по-прежнему потребуется внешний воркер или планировщик.

Как обновить Django до новой версии

Перед обновлением... желательно устранить все предупреждения о устаревании, которые выдает ваш текущий проект.

Django 6.0 поддерживает Python 3.12 и 3.13. Настоятельно рекомендуется выполнить обновление.

python -Wa manage.py test

Если вы установили Django с помощью pip, используйте флаг --upgrade:

Windows:

uv add django --pre 

# Тест на Windows
uv run python -Wa manage.py test

После запуска тестов исправьте все неудачные проверки. Пока записи о выпуске свежи в вашей памяти. Это также может быть подходящим моментом, чтобы воспользоваться преимуществами новых функций в Django, проведя рефакторинг вашего кода для устранения предупреждений об устаревании…

Критические изменения и удалённые возможности

Обновление до Django 6.0 не совсем простое. Вот ключевые критические изменения, на которые стоит обратить внимание:

Изменения в API базы данных:

  • return_insert_columns переименован в returning_columns

Поддержка Python:

  • Требуется Python 3.12 и выше

  • Поддержка Python 3.11 и более старых версий прекращена

Поддержка MariaDB:

  • Прекращена поддержка MariaDB 10.5

DEFAULT_AUTO_FIELD:

  • Теперь по умолчанию используется BigAutoField, если значение не задано явно

Пользовательские ORM-выражения:

  • Метод as_sql() теперь должен возвращать кортеж (sql, params_tuple) вместо списка

Почтовый API:

  • Позиционные аргументы в django.core.mail больше не поддерживаются — используйте именованные

Удалённые внутренние компоненты:

  • Устаревшие внутренние компоненты email

  • DjangoDivFormRenderer

  • Поддержка позиционных аргументов в BaseConstraint удалена

Изменение схемы URL:

  • Схема по умолчанию для urlize/urlizetrunc теперь HTTPS (резервный вариант с HTTP удалён)

Заключение: Более мощный и современный Django

Django 6.0 знаменует собой значительный шаг вперёд, укрепляя свои позиции в качестве фреймворка высшего класса для создания надёжных, масштабируемых и современных веб-приложений.

Если вы используете Django 5.x (или более раннюю версию), начинайте подготовку уже сейчас: проведите ваши проверку ваших пользовательских ORM-выражений и убедитесь в совместимости ваших зависимостей с Python 3.12.

Более подробно можете прочитать здесь - Django 6.0 Release Notes, Content Security Policy (CSP) , partials, and Task framework

Какая функция в Django 6.0 вам нравится больше? Поделитесь своим мнением в комментариях.

Комментарии (1)