Обновление Django до новой версии

Время от времени эта процедура может быть сложной, но обновление до последней версии Django имеет ряд преимуществ:

  • Добавление новой функциональности и различных улучшений
  • Закрытие старых багов
  • Older version of Django will eventually no longer receive security updates. (see Поддерживаемые версии).
  • Если вы будете обновлять Django при выходе каждого нового релиза, это сделает процедуру последующих обновлений менее болезненной и сохранит ваш код в актуальном состоянии.

Ниже изложено несколько вещей, призванных сделать обновление настолько мягким, насколько это вообще возможно.

Обязательно к прочтению

Если это ваше первое обновление, полезно будет прочесть guide on the different release processes.

Впоследствии вы можете ознакомиться с изменениями, которые были сделаны в новых версиях(версии) Django:

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

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

If you’re upgrading through more than one feature version (e.g. 2.0 to 2.2), it’s usually easier to upgrade through each feature release incrementally (2.0 to 2.1 to 2.2) rather than to make all the changes for each feature release at once. For each feature release, use the latest patch release (e.g. for 2.1, use 2.1.15).

Аналогичный подход рекомендуется при обновлении с одной LTS версии до следующей.

Зависимости

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

Исправление предупреждений об устаревании(deprecation warning)

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

In Python, deprecation warnings are silenced by default. You must turn them on using the -Wa Python command line option or the PYTHONWARNINGS environment variable. For example, to show warnings while running tests:

$ python -Wa manage.py test
...\> py -Wa manage.py test

If you’re not using the Django test runner, you may need to also ensure that any console output is not captured which would hide deprecation warnings. For example, if you use pytest:

$ PYTHONWARNINGS=always pytest tests --capture=no

Исправьте все предупреждения об устаревании для вашей текущей версии Django и затем продолжите процесс обновления.

Сторонние приложения могут использовать устаревший API, чтобы поддерживать несколько версий Django, поэтому предупреждения в сторонних приложениях не всегда указывают на проблему. Если приложение не поддерживает последнюю версию Django, вам следует создать задачу или отправить «pull request» для этого приложения.

Установка

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

If you installed Django with pip, you can use the --upgrade or -U flag:

$ 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. К таким моментам можно отнести кэширование объектов HttpResponse как непосредственное, так и посредством декоратора cache_page().