Så här uppgraderar du Django till en nyare version¶
Även om det ibland kan vara en komplex process har uppgradering till den senaste Django-versionen flera fördelar:
Nya funktioner och förbättringar läggs till.
Buggar är åtgärdade.
Äldre versioner av Django kommer så småningom inte längre att få säkerhetsuppdateringar. (se Versioner som stöds).
Att uppgradera när varje ny Django-version finns tillgänglig gör framtida uppgraderingar mindre smärtsamma genom att hålla din kodbas uppdaterad.
Här är några saker att tänka på för att göra din uppgraderingsprocess så smidig som möjligt.
Obligatorisk läsning¶
Om det är första gången du gör en uppgradering är det bra att läsa guiden om de olika releaseprocesserna.
Efteråt bör du bekanta dig med de ändringar som gjorts i den nya Django-versionen (eller versionerna):
Läs release notes för varje ”final” release från den som kommer efter din nuvarande Django-version, till och med den version som du planerar att uppgradera till.
Titta på deprecation timeline för relevanta versioner.
Var särskilt uppmärksam på bakåtkompatibla ändringar för att få en klar uppfattning om vad som krävs för en lyckad uppgradering.
Om du uppgraderar genom mer än en funktionsversion (t.ex. 2.0 till 2.2) är det vanligtvis enklare att uppgradera genom varje funktionsversion stegvis (2.0 till 2.1 till 2.2) än att göra alla ändringar för varje funktionsversion på en gång. För varje funktionsversion ska du använda den senaste patchversionen (t.ex. för 2.1 ska du använda 2.1.15).
Samma stegvisa uppgraderingsmetod rekommenderas när du uppgraderar från en LTS till nästa.
Beroenden¶
I de flesta fall kommer det att vara nödvändigt att uppgradera till den senaste versionen av dina Django-relaterade beroenden också. Om Django-versionen nyligen släpptes eller om vissa av dina beroenden inte är väl underhållna, kanske vissa av dina beroenden ännu inte stöder den nya Django-versionen. I dessa fall kan du behöva vänta tills nya versioner av dina beroenden släpps.
Lösning av varningar om föråldring¶
Innan du uppgraderar är det en bra idé att lösa eventuella deprecation-varningar som ditt projekt ger upphov till när du använder din nuvarande version av Django. Genom att åtgärda dessa varningar före uppgraderingen säkerställer du att du är informerad om områden i koden som behöver ändras.
I Python är deprecation-varningar tysta som standard. Du måste aktivera dem med hjälp av Pythons kommandoradsalternativ -Wa
eller miljövariabeln PYTHONWARNINGS
. Till exempel, för att visa varningar när du kör tester:
$ python -Wa manage.py test
...\> py -Wa manage.py test
Om du inte använder Djangos testlöpare kan du också behöva se till att konsolutmatning inte fångas upp, vilket skulle dölja varningar om avskrivning. Till exempel, om du använder pytest:
$ PYTHONWARNINGS=always pytest tests --capture=no
Lös eventuella varningar om utfasning med din nuvarande version av Django innan du fortsätter uppgraderingsprocessen.
Tredjepartsapplikationer kan använda föråldrade API:er för att stödja flera versioner av Django, så varningar om föråldrade API:er i paket som du har installerat behöver inte nödvändigtvis indikera ett problem. Om ett paket inte stöder den senaste versionen av Django, överväg att lyfta ett problem eller skicka en pull-begäran för det.
Installation¶
När du är redo är det dags att installera den nya Django-versionen. Om du använder en virtuell miljö
och det är en stor uppgradering, kanske du vill konfigurera en ny miljö med alla beroenden först.
Om du installerade Django med pip kan du använda flaggan --upgrade
eller -U
:
$ python -m pip install -U Django
...\> py -m pip install -U Django
Testar¶
När den nya miljön är konfigurerad, kör hela testsviten för din applikation. Återigen är det användbart att slå på deprecation-varningar så att de visas i testutdata (du kan också använda flaggan om du testar din app manuellt med manage.py runserver
):
$ python -Wa manage.py test
...\> py -Wa manage.py test
När du har kört testerna ska du åtgärda eventuella fel. Medan du har release notes färskt i minnet kan det också vara en bra tid att dra nytta av nya funktioner i Django genom att refaktorisera din kod för att eliminera eventuella deprecation-varningar.
Utplacering¶
När du är tillräckligt säker på att din app fungerar med den nya versionen av Django är du redo att gå vidare och deploy ditt uppgraderade Django-projekt.
Om du använder cachelagring som tillhandahålls av Django bör du överväga att rensa din cache efter uppgradering. Annars kan du stöta på problem, till exempel om du cachelagrar picklade objekt eftersom dessa objekt inte garanteras vara pickle-kompatibla mellan Django-versioner. Ett tidigare fall av inkompatibilitet var cachelagring av inlagda HttpResponse
-objekt, antingen direkt eller indirekt via cache_page()
-dekoratorn.