Django: Závěr

Náš seriál se tímto dílem dostal na naprostý konec (což ovšem neznamená, že už by se o Djangu nedalo psát mnohem víc). Proto se zevrubně podíváme na několik součástí Djanga, na které se v předchozích dílech nedostalo, a také si ukážeme nějaké tipy a triky, které vám pomohou v další práci s tímto frameworkem.

Seriál: Hrajeme si s Djangem (16 dílů)

  1. Django: Úvod a instalace 14.8.2009
  2. Django: Nastavení projektu a první pokusy 21.8.2009
  3. Django: Databázový model 28.8.2009
  4. Django: Databázový model podruhé 4.9.2009
  5. Django: Administrace 11.9.2009
  6. Django: Prezentace dat 18.9.2009
  7. Django: Prezentace dat podruhé 25.9.2009
  8. Django: Zpracovávání formulářů 2.10.2009
  9. Django: Autentizace a autorizace 9.10.2009
  10. Django: Nahrávání souborů 16.10.2009
  11. Django: Zabudované aplikace 23.10.2009
  12. Django: Rozšiřování možností Djanga 30.10.2009
  13. Django: Internacionalizace 6.11.2009
  14. Django: Nasazování projektu 13.11.2009
  15. Django: Kešování a škálování 20.11.2009
  16. Django: Závěr 27.11.2009

Další zajímavá témata

Middleware

Tento pojem byl již několikrát v předchozích dílech tohoto seriálu použit. Nejedná se o nic jiného, než o posloupnost funkcí, které jsou zavolány mimo samotné zpracování pohledu a které ovlivňují objekty request a response. Tyto funkce mohou dělat takřka libovolnou činnost. Kupříkladu middleware ve výchozím projektu zajišťuje správu session a autentizaci.

Když bychom si chtěli napsat vlastní middleware, museli bychom si založit novou třídu a do ní umístit jednu nebo více metod podle vzoru. Tyto metody se liší okamžikem, kdy budou zavolány.

Syndikace obsahu

Syndikační formáty RSS a Atom, jež jsou založené na XML, se staly velice populárními. Umožňují uživatelům odebírat seznam změn na daném webu. V Djangu máme možnost jednoduše připojit syndikaci k libovolnému modelu. Stačí přidat URL mířící na pohled django.contrib.syndication.views.feed a tomu jako parametr poskytnout slovník s klíčem 'feed_dict'. Hodnota tohoto klíče musí obsahovat jednu nebo více kategorií (např. články, komentáře) příslušící potomkům třídy django.contrib.syndication.feeds.Feed. Pomocí jednoduchého dědění tříd si tak definujeme vlastnosti a obsah našeho syndikačního kanálu.

Ve výchozím nastavení se generuje kanál ve formátu RSS verze 2, což je možné jednoduše změnit, stejně jako další nastavení kanálu. Pro více informací o syndikaci nahlédněte do oficiální dokumentace.

Mapa stránek

Stejně jako formáty syndikace, i mapa stránek (sitemap) je postavena na XML. Umožňuje vyhledávacím robotům urychlit procházení stránek a hlídání změn. Po přidání položky 'django.contrib.sitemaps' do konfigurační konstanty INSTALLED_APPS nám stačí provázat pohled django.contrib.sitemaps.views.sitemap s nějakým URL a podobně jako u syndikace obsahu poskytnout slovník se zděděnými třídami. Tentokrát je potřeba třídy odvodit z django.contrib.sitemaps.Sitemap  a můžeme nastavit položky jako je priorita, frekvence indexování a čas poslední změny obsahu. Opět se doporučuji podívat na detailní popis v dokumentaci.

Více domén v jenom projektu

Pomocí aplikace django.contrib.sites můžeme provozovat projekt na několika doménách najednou a odlišovat jejich obsah. To může být užitečné v případech, že máme na různých doménách stejný obsah v různých jazycích nebo pokud dva weby sdílí velkou část stejného obsahu. Model django.contrib.sites.models.Site můžeme propojit se stávajícími modely a podle toho rozhodovat, jaký obsah se bude zobrazovat na určitých doménách.

Přesměrování

Django poskytuje i aplikaci pro přesměrování odkazů. Když chceme návštěvníkům zpřístupnit jeden obsah na více lokacích, stačí nám přidat do konfigurační konstanty INSTALLED_APPS položku 'django.contrib.redirects', poté na konec konstanty MIDDLEWARE_CLASSES položku 'django.contrib.redirects.middleware.RedirectFallbackMiddleware' a sesynchronizovat databázi. Zobrazí se nám v administraci rozhraní pro správu přesměrování. Tam máme možnost specifikovat adresy pro přesměrování.

Stránkování

Pomocí stránkování návštěvníkům zpřehledníme orientaci v modelu s mnoha položkami. Stačí v pohledu obalit objekty QuerySet třídou django.core.paginator.Paginator a nastavit, po kolika prvcích se má listovat a na které straně se teď nacházíme. Také můžeme použít nějaký z generických pohledů, které tuto funkci mají již zabudovanou. V obou případech musíme v šabloně vypsat navigaci, aby uživatel mohl procházet mezi jednotlivými stránkami.

Závěrečné rady

Snažte se zamezit opakování

Opakování je sice matkou moudrosti, ale v kódu je naprosto nevhodné. Předtím než začnete s vytvářením části projektu, promyslete si strukturu kódu a snažte se opakující se schéma zachytit do samostatných funkcí. Prostudujte si zkratky a snažte se je používat co nejčastěji. Co se týče odkazů, místo přímého zadávání cest lze využít v modelech dekorátor permalink a využívat v šablonách značku url . Aplikace se tak stane univerzálnější a když budeme chtít změnit strukturu odkazů, stačí nám editovat pouze soubor s definicí URL.

Využívejte už jednou napsaný kód

Správně napsanou aplikaci by nemělo být problém přenést do jiného projektu. Netýká se to jenom vlastního kódu. Při promýšlení určitého problému se nejprve podívejte, jestli ho už neřeší nějaká volně dostupná aplikace nebo kód není publikován na Django Snippets. Rozhodně se neostýchejte použít generické pohledy všude tam, kde to je jenom možné. Generické pohledy jsou napsány tak, aby obsloužily co nejvíce častých činností — s trochou snahy můžete i své vlastní pohledy psát natolik genericky, aby byly znovupoužitelné.

Django je napsané v Pythonu

Python obsahuje velké množství volně dostupných knihoven a při práci s Djangem lze využít libovolnou z nich. Kromě toho je Python postavený na objektově orientovaném programování a obsahuje i několik rysů funkcionálního, což by se mělo projevit i ve vašem kódu. Čím lépe Python znáte, tím budete lepší vývojář v Djangu.

Manuál je váš kamarád

Django má výbornou anglickou dokumentaci, která popisuje detailně jednotlivé moduly a ukazuje jejich použití na příkladech. Ucelená česká dokumentace zatím neexistuje, ale je možné, že časem vznikne v příslušné sekci na webu Djangoproject.cz.

Nebojte se zeptat

Pokud si s nějakým problémem nevíte rady nebo jenom potřebujete prodiskutovat nějaké řešení, neváhejte se zeptat komunity. I když zatím českých vývojářů v Djangu není hodně, velice rádi vám pomůžeme. Stačí poslat e-mail do diskuzní skupiny django-cs nebo se připojit na IRC kanál #django-cs na serveru Freenode.

Poděkování

Chci poděkovat Zdrojáku za poskytnutý prostor, dále Filipu Vaculíkovi (Mintaka) a Michalu Valouškovi (msgre) za korektury a cenné připomínky, a také všem, kteří přispěli důležitými informacemi v komentářích. Díky. Pavel Dvořák

Autor je dlouhodobým studentem Fakulty informatiky, webový nadšenec a programátor — nejraději programuje v jazycích Haskell a Python.

Věděli jste, že nám můžete zasílat zprávičky? (Jen pro přihlášené.)

Komentáře: 6

Přehled komentářů

TomBil Poděkování
gal Re: Django: Závěr
Mintaka Připojuji se k poděkování
Karlos Super
Dramon Děkuji za nakopnutí
viker Podekovani
Zdroj: https://www.zdrojak.cz/?p=3130