Aktualizace webů z DjangoCMS 3.x na verzi 4.x

S vydáním DjangoCMS 4.x se v tomto redakčním systému objevily nové možnosti. Přestože jde o přirozený vývoj frameworku, migrace z verze 3.x na 4.x není pouhým updatem závislostí – vyžaduje důkladnou revizi a částečně i přepsání kódu. V tomto článku se podíváme na klíčové změny, úskalí migrace a doporučený postup, který vám pomůže přejít na verzi 4 co nejefektivněji.

Proč vůbec přecházet na DjangoCMS 4?

Pokud stále provozujete web na DjangoCMS 3.x, možná si říkáte, zda má upgrade smysl. Zde jsou hlavní důvody, proč přechod zvažovat:

  • Kompatibilita s novějšími verzemi Django – DjangoCMS 4 podporuje Django 5.x.
  • Verzování obsahu – Ukládání změn v obsahu do verzí.
  • Zjednodušená editace obsahu – Úpravy textu přímo na stránce.
  • Verzování aliasů – Ukládání změn společného obsahu do verzí.
  • Nová správa stránek – Přehlednější seznam stránek jen pro vybranou jazykovou verzi.
  • Kompatibilita pluginů třetích stran – Nové pluginy místo původních, již nevyvíjených.

Ovšem pokud s DjangoCMS začínáte s úplně novým projektem, tak použijte aktuální verzi CMS 5. Přechod z 3.x na 5.x by byl o dost komplikovanější a tak bylo vhodnější verzi 4 nepřeskakovat.

Klíčové změny ve verzi 4

Při migraci narazíte na několik zásadních změn:

1. Verzování obsahu

Důležitou změnou ve verzi 4 je zavedení komplexního verzování obsahu. Každá úprava obsahu provedená editorem je uložena jako samostatná verze. Tím je odstraněn problém z CMS 3, kde byl předchozí obsah nenávratně ztracen. Nyní lze jednotlivé verze publikovat, depublikovat, archivovat a mazat.

Systém nabízí vizuální porovnání dvou verzí („diff“), kde zeleně zvýrazňuje přidaný obsah a červeně odstraněný obsah.

Změny je možné porovnávat také přímo na úrovni kódu.

2. Zjednodušená editace obsahu

Přímá editace (Inline Editing): Na rozdíl od verze 3, kde se pro úpravu textu otevíralo dialogové okno, ve verzi 4 editor klikne přímo do textu na stránce a okamžitě jej upravuje. Editoři, kterým tento způsob úpravy nevyhovuje, mohou tuto funkcionalitu vypnout a editovat obsah původním způsobem v dialogovém okně. Přímo při editaci jsou k dispozici všechny potřebné nástroje:

  • Horní lišta (toolbar) pro formátování stylů.
  • Levá lišta pro nastavení typu odstavce, zarovnání nebo odsazení.

Možnost vkládat do textu další pluginy zůstala zachována. Úpravy se uloží kliknutím mimo editační rámec. Následně je možné obsah zveřejnit standardním tlačítkem „Publish“.

3. Verzování aliasů

Funkce dříve známá jako „statické umístěnky“ (Static Placeholders) byla přejmenována na „Aliasy“ a byla pro ni rovněž zavedena podpora verzování. Zatímco statické umístěnky se editovaly společně s obsahem stránky, tak aliasy se editují samostatně. To má výhodu v tom, že editor vidí jen to, co má editovat a zároveň nevýhodu v tom, že výsledek může kvůli jiným kaskádovým stylům na stránce vypadat odlišně.

  • Účel: Aliasy slouží pro obsah, který se opakuje na více stránkách webu, typicky záhlaví a zápatí.
  • Funkčnost: S aliasy lze nyní pracovat stejně jako s obsahem stránek – je možné je verzovat, publikovat, depublikovat a porovnávat jejich změny.

4. Nová správa stránek

Seznam stránek se nyní zobrazuje jen pro vybranou jazykovou verzi. To seznam zpřehledňuje. Stránky z jiných jazykových verzí, které nemají obsah pro vybraný jazyk, se ale v seznamu zobrazují také. Zobrazují se jako neaktivní, což indikuje, že jim chybí obsah. Ten je možné následně doplnit.

5. Kompatibilita pluginů třetích stran

Některé balíčky již nemusí být plně kompatibilní s verzí 4. Například původní djangocms-text-ckeditor je nahrazen za novější djangocms-text.

Postup migrace

1. Přípravná fáze: Úpravy kódu

Před spuštěním samotné migrace bylo nutné upravit kód projektu tak, aby byl kompatibilní s Django CMS 4.

  • Změna datových modelů: Model Title byl nahrazen modelem PageContent. To vyžadovalo i úpravy v dotazech do databáze (QuerySets).
  • Signály: Signály pro publikování a depublikování stránek se nově vážou na model djangocms_version místo na model stránky Page.
  • Šablony: V šablonách bylo nutné upravit značku pro statickou umístěnku static_placeholder na novou značku alias_placeholder.

2. Databáze

Django CMS ve verzi 4.x vyžaduje u databáze Postgres minimální verzi 16. Upgrade na tuto nebo na vyšší verzi byl nutný předpoklad pro fungování zmigrovaných webů.

3. Nástroj pro Migraci

Pro převod databáze existuje specializovaný nástroj Django CMS 4 Migration. Nástroj explicitně upozorňuje, že změny, které provede v databázi, jsou nevratné. Je naprosto klíčové mít před spuštěním migrace vytvořenou zálohu databáze.
Použitím nástroje přímo z repozitáře se nepodařilo kód zmigrovat – proces skončil s chybou. Pro migraci byl proto použit vlastní fork, ve kterém byly odstraněny vzniklé problémy:

  • Ošetření duplicit verzí: Byly přidány úpravy, které zabraňovaly vzniku duplicit při vytváření verzí obsahu.
  • Odstranění duplicit v URL: Migrace generovala také duplicitní URL záznamy pro stránky, což bylo nutné opravit.

4. Průběh migrace

Samotný upgrade byl proveden spuštěním příkazu django-admin cms4_migration v rámci nasazovacího prostředí v GitLabu. Migrace proběhla bez přerušení provozu webů. Převedeno bylo přibližně dvacet webů. Díky důkladnému testování na testovacím prostředí a připraveným zálohám proběhly všechny migrace bezchybně.

Architektonické srovnání Django vs Django CMS

Zde je srovnání frameworků podle závislostí. Podle nich lze Django považovat za monolit, který má veškerou funkcionalitu obsaženu v sobě. Naproti tomu DjangoCMS je stavebnice sestavená z různých částí, které se starají o konkrétní funkcionalitu. Značná část těchto částí ani není v přímých závislostech projektu. Je tak možné si CMS poskládat z úplně jiných částí.

Django DjangoCMS
pyproject.toml: pyproject.toml:
asgiref Knihovna pro asynchronní
volání funkcí.

Django

Framework.
sqlparse SQL parser.

django-classy-tags

Renderování značek v šablonách.

django-formtools

Množina abstrakcí pro Django formuláře.

django-treebeard

Stromová struktura pro stránky nebo pluginy.

django-sekizai

Renderování umístěnek v šablonách.

djangocms-admin-style

CSS styly pro administraci webu.

requirements.in na https://github.com/django-cms/cms-template/

djangocms-versioning

Verzování obsahu.

djangocms-alias

Obsah sdílený více stránkami

djangocms-frontend

Skupina pluginů pro obsah stránek.

django-filer

Správa souborů.

djangocms-text

Plugin pro editaci textu se styly.

django-fsm

Podpora pro výčtový typ enum.

djangocms-simple-admin-style

Alternativní styly pro administraci.

Popis jak si spustit framework Django nebo DjangoCMS

Chcete-li si oba frameworky vyzkoušet, tak zde je graf jak to provést:

Příspěvek do open-source komunity

Během testování a nasazování jsme objevili chybu v pluginu EditorNote (součást projektu djangocms-frontend). Chybu jsme opravili a oprava pak prostřednictvím pull requestu byla začleněna do hlavního projektu. Tímto jsme open-source komunitě přispěli svým malým dílem k tomu, abychom všichni mohli tento kód společně používat.

Závěr

Migrace na DjangoCMS 4 je krokem vpřed pro každého vývojáře, který chce udržet své webové projekty bezpečné, moderní a dlouhodobě udržitelné. Ačkoli přechod může chvíli trvat, výhody v podobě čistšího kódu, kompatibility s novým Djangem a lepší správy pluginů za to rozhodně stojí.

Autor:

Zanechte komentář

Všechny údaje jsou povinné. E-mail nebude zobrazen.

This site uses Akismet to reduce spam. Learn how your comment data is processed.