Как да надградим Django - ръководство стъпка по стъпка
Когато работим по мащабни проекти, обикновено разработката им отнема години. При това положение не е чудно, че използваните в началото технологии са остарели и идва момент, в който трябва да бъдат актуализирани с по-нови.
Защо обновяваме софтуера?
Първо, новите технологии често ни позволяват да постигнем същата функционалност с по-малко код, защото предлагат допълнителни възможности за реализация. Освен това новите версии на технологиите осигуряват по-добра защита срещу злонамерена дейност, тъй като в повечето случаи хакерите вече са открили пропуските в сигурността на старите системи и начините за тяхното преодоляване. Най-новите версии включват и нови функции, които можем да използваме.
Това са основните причини, поради които искаме даден софтуер да бъде актуализиран често.
Целта
Да кажем, че най-новата версия с дългосрочна поддръжка (LTS) на Django е избраната версия, която искаме да обновим. Ако имате повече от една версия между текущата и желаната, не е добра идея да преминавате директно към нея. Вместо това го направете на етапи за всяка LTS версия и я пуснете поотделно. Ефикасният процес на обновяване помага за по-плавното му осъществяване, като го насърчава да се случва във всяка точка на издаване.
Ето кои са поддържаните в момента версии на Django:
Източник: Django website
В тази публикация в блога разглеждам процеса, който следвахме за нашите поръчкови приложения, усъвършенстван от опита на всяко предишно надграждане.
Процесът по етапи
Планиране и подготовка
Планирането е на първо място. Изберете подходящите библиотеки, след като изберете версията на Django. Имайте предвид, че проектът може да не може да работи с по-нова версия на Django и нейните по-стари библиотеки, защото много от тях няма да са съвместими.
Подготовката идва след това. Създаваме таблица в Excel с всички библиотеки, които се използват в момента в проекта.
Следващата стъпка е проверка дали тази по-нова версия не изисква по-нов Python. Версиите на Django са съчетани с определени диапазони от версии на Python, които са били налични при разработването на тази версия, така че обновяването на Python е итеративен процес.
Следващата стъпка в процеса на планиране е да се намерят бележките за издаване - прочетете всяка бележка за издаване на версията на Django, която е по-голяма от текущата. Разберете промените в бележките за издаване на версиите и всяка модификация, която трябва да се направи в кода, за да може проектът да използва по-новата версия. Прочетете ги внимателно, тъй като някои промени могат да бъдат много фини по отношение на това как предизвикват проблеми. След това сме готови да предприемем действия.
Действие
Добре е да започнете с бележките към изданието на Django и всички промени в него. След това промяната на няколко импорта е половината от работата. Например:
При обновяването от версия 1.11 до версия 2.2 замених "from django.core.urlresolvers import reverse" с "from django.urls import reverse".
-from rest_framework.filters import DjangoFilterBackend
+from django_filters.rest_framework import DjangoFilterBackend
Отмяна на аргумента Router.register base_name в полза на basename
Възможно е да има някои малки промени в кода, като например:
Добавяне на метода ForeignKey on_delete
Заменете употребите на @detail_route с @action(detail=True, )
Заменете употребите на @list_route с @action(detail=False, )
добавяне на подразбиране за вложено поле на сериализатора
Поправяне на много обратни извиквания на адреси
Продължете, като актуализирате версията на Django Rest Framework и всички библиотеки от Excel, като отбележите получената версия.
Разбира се, някои от тях може да не могат да бъдат актуализирани с помощта на предишната версия на Django, така че можете да ги оставите за накрая. Например при една от актуализациите ни имаше проблем с пакета, който ни позволява да записваме данни във формат JSON. По-новата версия на Django поддържа това специфично поле. Така че трябваше да премахна старата библиотека и да мигрирам данните. Конвертирането на библиотеката на Djoser беше трудната част, но нямаше нищо невъзможно. И накрая, когато всички библиотеки са обновени, дойде време да се повиши действителната версия на Django.