Как стать автором
Обновить
228.3
Яндекс Практикум
Помогаем людям расти

Релиз Django LTS 4.2: обзор изменений и необходимости обновления

Уровень сложностиСредний
Время на прочтение8 мин
Количество просмотров8K

В апреле 2023 года вышла новая LTS-версия Django Web Framework, одного из самых популярных фреймворков для веб-разработки на Python.

«Вышла новая версия! Почему вы до сих пор не перешли на неё?» — такой вопрос часто возникает у студентов, изучающих этот фреймворк на курсах программирования. Аналогичный вопрос можно услышать и от начинающего специалиста, который недавно приступил к выполнению своих обязанностей в качестве бэкенд-разработчика.

А стоит ли сейчас вообще начинать новый проект на Django или изучать этот фреймворк? В этой статье я помогу разобраться с этими и другими вопросами. Мы поговорим о разных типах релизов Django, посмотрим на главные изменения в новом и затронем основные аспекты, которые следует учитывать при обновлении версии Django в проекте.

Евгений Бартенев

техлид и автор курса «Python-разработчик» в Яндекс Практикуме

Различие релизов

Для начала разберёмся в различных типах обновлений фреймворка, которые доступны разработчикам. Они делятся на три основные категории:

  • Фича-релизы (Feature releases). Это обновления, которые обычно выходят каждые восемь месяцев. Они включают в себя новые функции, возможности, оптимизации и улучшения существующих компонентов.

  • Релизы исправлений (Patch releases). Эти обновления выпускаются по мере необходимости и предназначены для устранения ошибок, проблем с безопасностью и других недоработок, обнаруженных в рамках соответствующих фича-релизов. Релизы исправлений позволяют разработчикам поддерживать стабильность и безопасность своих продуктов.

  • LTS-релизы (Long-term support releases). Некоторые фича-релизы получают статус LTS, что означает «долгосрочная поддержка». В таких релизах исправления, связанные с безопасностью и стабильностью работы, гарантированно будут выходить на протяжении определённого периода времени, который обычно составляет три года. Это обеспечивает разработчикам возможность использовать стабильные версии фреймворка для своих проектов, не опасаясь быстрого устаревания выбранной версии или прекращения поддержки со стороны команды разработчиков.

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

На момент написания статьи самой новой LTS-версией является 4.2 LTS, расширенная поддержка которой прекратится в апреле 2026 года. Обновления к предыдущей LTS-версии Django 3.2 перестанут выходить в апреле 2024 года.

Если в вашем проекте используется именно версия 3.2, то переживать не стоит. После даты окончания поддержки проект не «превратится в тыкву»: просто для этой версии фреймворка перестанут выходить патч-релизы.

Обзор ключевых изменений Django в версии 4.2 LTS

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

  • Появилась поддержка библиотеки Psycopg 3

    django.db.backends.postgresql — это адаптер базы данных Django для работы с PostgreSQL. Этот адаптер предоставляет реализацию специфических функций PostgreSQL и позволяет использовать эту базу данных в Django-приложении.

    Теперь он поддерживает библиотеку psycopg версии 3.1.8 или выше. Чтобы воспользоваться новой возможностью — достаточно установить библиотеку psycopg, а сам адаптер в настройках менять не надо. Стоит также помнить и о том, что поддержка psycopg2, вероятно, в будущем будет прекращена.

  • Появилась возможность добавлять комментарии к таблице и её столбцам при описании модели

    Такие новые параметры, как Field.db_comment и Meta.db_table_comment , позволяют добавлять комментарии к столбцам и таблицам соответственно. Например, вот так:

    from django.db import models
    
    
    class Post(models.Model):
        text = models.TextField(db_comment='Post text')
        pub_date = models.DateTimeField(
            db_comment='Date and time when the post was published',
        )
    
        class Meta:
            db_table_comment = 'Post details'
    
    

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

  • Усовершенствована защита от BREACH-атаки

    Аббревиатура BREACH расшифровывается как Browser Reconnaissance and Exfiltration via Adaptive Compression of Hypertext. Это атака на веб-приложения, которая эксплуатирует сжатие данных и криптографию, чтобы получить доступ к конфиденциальной информации. Звучит сложно, но на практике всё проще.

    Веб-сайты и браузеры обычно используют сжатие данных (например Gzip) для уменьшения объёма передаваемых данных и ускорения загрузки страниц. Они также почти всегда используют протокол HTTPS (шифрование) для защиты передаваемых данных от перехвата злоумышленниками.

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

    Разработчики Django усложнили жизнь взломщикам: промежуточный слой GZipMiddleware добавляет до 100 случайных байтов в gzip-ответы, чтобы затруднить подобные атаки.

  • Стало доступно хранилище файлов в памяти

    django.core.files.storage — это модуль в Django, который предоставляет механизмы для работы с файловым хранилищем. Он определяет базовый класс Storage и несколько стандартных реализаций, которые позволяют обрабатывать и хранить файлы на разных системах хранения.

    Новый класс django.core.files.storage.InMemoryStorage предоставляет возможность хранить файлы в оперативной памяти. Такую возможность удобно использовать для разных задач, например для тестировании кода. За счёт отказа от обращения к диску можно ускорить работу автоматических тестов, которые должны взаимодействовать с файлами.

Это лишь некоторые существенные нововведения; помимо них есть ещё и огромное количество минорных изменений, а также изменений, связанных с отключением устаревших возможностей.

Стоит отметить и некоторые другие обновления, опубликованные после выпуска версии 3.2 LTS. В частности, в версиях 4.0 и 4.1 разработчики выделяют следующее:

  • Совместимость с Python
    Начиная с версии 4.0 Django не гарантирует совместимость с версиями Python 3.7 и ниже.

  • Работа с часовыми поясами
    В Django 4.0 и выше для поддержки часовых поясов используется модуль zoneinfo, входящий в стандартную библиотеку Python 3.9. Если используется Python 3.8, то вместе с Django теперь автоматически устанавливается пакет backports.zoneinfo.

  • Поддержка Redis
    Добавлен новый бэкенд django.core.cache.backends.redis.RedisCache, предоставляющий поддержку кэширования с использованием Redis «из коробки».

  • Асинхронный интерфейс для ORM
    Разработчики Django постепенно внедряют во фреймворк поддержку асинхронности. Асинхронные представления и middleware появились в Django 3.1, а с версии 4.1 Django ORM может обрабатывать и асинхронные запросы, хотя сам ORM остаётся синхронным.

  • Поддержка асинхронных методов для классов-представлений (Class Based Views)
    Начиная с версии 4.1, при описании класса-представления, помимо синхронных допускаются и асинхронные методы. Но миксовать их нельзя: все методы должны быть либо синхронными (определены с помощью def), либо асинхронными (определены с помощью async def). Django автоматически определит асинхронные представления и выполнит их в асинхронном контексте.

Когда нужно переходить на новую версию?

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

При выходе новой версии фреймворка разработчики, как правило, не пытаются сразу перевести свои проекты на неё:

  • зачастую это технически сложная задача, которая стоит времени и денег,

  • переводить работающий проект на новую версию фреймворка бывает нерационально: добавленные возможности не стоят затрат, которых потребует переход на новую версию.

И это относится не только к фреймворкам, а, например, и к версии интерпретатора. Вы удивитесь, но довольно много проектов всё ещё разрабатываются на Python второй версии.

Решение об обновлении версии Django в действующем проекте должно основываться на ряде факторов. Рассмотрим несколько ситуаций, когда стоит и не стоит обновлять версию Django.

Когда стоит обновлять:

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

    Существует период, когда две поддерживаемые LTS версии пересекаются во времени — это срок продолжительностью в один год, когда надо завершить переход от одной LTS версии на другую. В этом случае вы сможете продолжать получать исправления ошибок и другие обновления безопасности.

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

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

Когда не стоит обновлять:

  • Стабильность. Если ваш проект стабилен, работает без проблем, не является критичным для бизнеса, да и просто не нуждается в новых возможностях, то обновляться, как правило, нет смысла. Исключением будет лишь ситуация, когда в использованной версии обнаружена уязвимость, несовместимая с безопасным продолжением работы проекта.

  • Риски совместимости. Обновление версии Django может привести к проблемам совместимости со сторонними библиотеками, подключёнными к проекту. Например, если новая версия несёт в себе изменения, несовместимые с вашим проектом, то ни к чему хорошему это точно не приведёт.

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

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

А какую версию Django лучше использовать на этапе изучения фреймворка?

В учебном курсе «Python-разработчик» в Практикуме, в теоретических уроках, практических заданиях на тренажёре, а также при создании и сдаче проектов используется Django версии 3.2 LTS.

Однако стоит отметить, что результат обучения не зависит от конкретной версии Django, использованной в рамках учебных проектов. Ведь основная цель курса заключается в том, чтобы предоставить учащимся фундаментальные знания и ключевые принципы работы с фреймворком. Между разными версиями Django эти принципы практически не меняются, а если изменения и происходят, то это случается редко и касается только отдельных деталей, вроде тех, что были описаны выше.

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

Чтобы ознакомиться со списком актуальных версий Django на данный момент, вы можете посетить официальную документацию.

Стоит ли вообще начинать новый проект на Django?

Согласно различным исследованиям, например от JetBrains, существенная часть действующих веб-проектов на Python написана с использованием одного из трёх фреймворков: Django, Flask или FastAPI.

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

Если в итоге ваш выбор пал на Django, то мой совет — использовать именно версию LTS. Но в любом случае, итоговый выбор фреймворка и его версии всегда остаётся за командой разработчиков.

Теги:
Хабы:
Всего голосов 6: ↑5 и ↓1+4
Комментарии4

Публикации

Информация

Сайт
practicum.yandex.ru
Дата регистрации
Дата основания
Численность
101–200 человек
Местоположение
Россия
Представитель
Ира Ко