Обновление Django до новой версии
Хотя иногда это может быть сложным процессом, обновление до последней версии Django имеет ряд преимуществ:
- Добавляются новые функции и улучшения.
- Исправляются ошибки.
- Более старые версии Django в конечном итоге больше не будут получать обновления безопасности. (см. Поддерживаемые версии).
- Обновление по мере выпуска каждой новой версии Django делает будущие обновления менее болезненными, сохраняя ваш код актуальным.
Ниже приведены некоторые моменты, которые следует учитывать, чтобы сделать процесс обновления как можно более гладким.
Необходимое чтение
Если вы делаете обновление впервые, полезно ознакомиться с руководством по различным процессам выпуска.
После этого вы должны ознакомиться с изменениями, внесёнными в новую версию Django:
- Прочитайте примечания к выпуску для каждого «окончательного» выпуска с последующего за вашей текущей версией Django до и включая версию, до которой вы планируете обновиться.
- Посмотрите график устаревания для соответствующих версий.
Обращайте особое внимание на несовместимые с обратной совместимостью изменения, чтобы четко понимать, что потребуется для успешного обновления.
Если вы обновляете более чем через одну функциональную версию (например, с 2.0 до 2.2), обычно проще обновляться через каждый функциональный выпуск постепенно (2.0 до 2.1 до 2.2), а не вносить все изменения сразу для каждого функционального выпуска. Для каждого функционального выпуска используйте последнюю фикс-версию (например, для 2.1 используйте 2.1.15).
Рекомендуется тот же подход к поэтапному обновлению при обновлении с одной LTS до следующей.
Зависимости
В большинстве случаев также потребуется обновить до последней версии ваших зависимостей, связанных с Django. Если версия Django была выпущена недавно или некоторые из ваших зависимостей плохо поддерживаются, некоторые из ваших зависимостей могут еще не поддерживать новую версию Django. В таких случаях вам может потребоваться подождать, пока не будут выпущены новые версии ваших зависимостей.
Решение предупреждений об устаревании
Перед обновлением рекомендуется решить любые предупреждения об устаревании, выводимые вашим проектом при использовании вашей текущей версии Django. Исправление этих предупреждений до обновления гарантирует, что вы будете осведомлены о частях кода, которые нуждаются в изменении.
В Python предупреждения об устаревании по умолчанию отключаются. Необходимо включить их с помощью опции командной строки Python -Wa или переменной среды PYTHONWARNINGS. Например, чтобы отобразить предупреждения при запуске тестов:
$ python -Wa manage.py test
...\> py -Wa manage.py test
Если вы не используете Django тест-раннер, вам может потребоваться также убедиться, что любой вывод консоли не перехватывается, что скрывало бы предупреждения об устаревании. Например, если вы используете pytest:
$ PYTHONWARNINGS=always pytest tests --capture=no
Устраните все предупреждения об устаревании с использованием вашей текущей версии Django перед продолжением процесса обновления.
Приложения сторонних разработчиков могут использовать устаревшие API для поддержки нескольких версий Django, поэтому предупреждения об устаревании в установленных вами пакетах не обязательно указывают на проблему. Если пакет не поддерживает последнюю версию Django, рассмотрите возможность создания проблемы или отправки запроса на вытягивание для него.
Установка
Когда вы будете готовы, пришло время установить новую версию Django. Если вы используете virtual environment и это обновление основных версий, вам может потребоваться сначала настроить новую среду со всеми зависимостями.
Если вы установили Django с помощью pip, вы можете использовать флаг --upgrade или -U:
$ python -m pip install -U Django
...\> py -m pip install -U Django
Тестирование
После настройки новой среды запустите полный набор тестов для вашего приложения. Снова полезно включить предупреждения об устаревании, чтобы они отображались в выводе тестов (вы также можете использовать флаг, если вручную тестируете ваше приложение с помощью manage.py runserver):
$ python -Wa manage.py test
...\> py -Wa manage.py test
После запуска тестов исправьте любые ошибки. Пока вы помните примечания к выпуску, это также может быть хорошее время, чтобы воспользоваться новыми функциями Django, переделав свой код, чтобы устранить любые предупреждения об устаревании.
Развертывание
Когда вы достаточно уверены, что ваше приложение работает с новой версией Django, вы готовы перейти к развертыванию вашего обновлённого проекта Django.
Если вы используете кэширование, предоставляемое Django, вам следует рассмотреть возможность очистки кэша после обновления. В противном случае у вас могут возникнуть проблемы, например, если вы кэшируете закодированные объекты, так как эти объекты не гарантируют совместимость с pickle между версиями Django. В прошлом была проблема с несовместимостью при кэшировании закодированных объектов HttpResponse, как напрямую, так и косвенно через декоратор cache_page().
© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/3.1/howto/upgrade-version/