Veľkonočná akcia je tu a s ňou aj extra kredity ZADARMO na náš interaktívny e-learning. Dobij si teraz kredity a posuň sa vo svojej kariére vpred!
Zarábaj až 6 000 € mesačne! Akreditované rekvalifikačné kurzy od 0 €. Viac informácií.

3. diel - Predstavenie MVC a MVT architektúry v Django

V minulej lekcii, Zoznámenie s Django frameworkom pre Python, sme si vytvorili svoju prvú webovú aplikáciu vo frameworku Django pre Python. Popasovali sme sa s routovaním a vypísali hlášku "Hello world!".

Než začneme používateľovi servírovať skutočné HTML stránky, predstavíme si v dnešnom tutoriáli webových aplikácií s frameworkom Django tzv. MVC architektúru a jej Django obdobu MVT. MVC architektúra sa totiž používa v návrhu takmer všetkých webových aplikácií.

Architektúra MVC

MVC je veľmi obľúbený architektonický vzor, ktorý sa uchytil najmä na webe, hoci pôvodne vznikol na desktopoch. Je súčasťou populárnych webových frameworkov, akými sú napr. Zend alebo Nette pre PHP, Ruby On Rail pre Ruby alebo ASP.NET pre .NET. Bez podobného vzoru je veľmi ťažké predstaviť si fungovanie zložitejšieho webu.

Motivácia

Základnou myšlienkou MVC architektúry je oddelenie logiky od výstupu. Rieši teda problém tzv. "špagetového kódu", kedy máme v jednom súbore (triede) logické operácie a zároveň renderovanie výstupu. Súbor teda obsahuje databázové dotazy, logiku (volanie Python príkazov) a rôzne pohádzané HTML tagy. Všetko je zamotané do seba ako špagety.

Kód sa samozrejme zle udržuje, nieto ešte rozširuje. Je zle highlightovaný, pretože si s ním IDE nevie rady, HTML nie je správne naformátovaný, strácame sa v jeho stromovej štruktúre. Našim cieľom je, aby zdrojový kód s logikou vyzeral ako zdrojový kód (Python) a výstup vyzeral ako HTML stránka s čo najmenšou prímesou ďalšieho kódu.

Komponenty

Celá aplikácia je rozdelená na komponenty troch typov, hovoríme o Modeloch, View ("Pohľadoch") a Control ("Kontroléroch"), odtiaľ MVC. Označenie "Pohľad" sa budeme snažiť vyhýbať, pretože nekorešponduje s označením "V" a môže miasť. Neexistuje žiadna striktná definícia architektúry a tak sa môžeme stretnúť s viacerými výkladmi. Zameriame sa na ten najrozšírenejší.

Komponenty Model a Controler sú samozrejme triedy. View je HTML šablóna.

Model

Komponent model z MVC architektúry - Základy Django frameworku pre Python Model obsahuje logiku aplikácie a všetko, čo do nej spadá. Sú to okrem iného výpočty, databázové dotazy, validácia a podobne. Model vôbec nevie o výstupe. Jeho funkcia spočíva v prijatí parametrov zvonku a vydaní dát von. Zdôraznime, že parametre nie sú URL adresa ani žiadne iné parametre od používateľa. Model nevie, odkiaľ dáta v parametroch prišli a ani ako budú výstupné dáta sformátované a vypísané.

Keďže budeme používať tzv. ORM (Objektovo-Relačné Mapovanie), naše modely budú priamo korešpondovať s databázovými tabuľkami. Budeme teda mať napr. model User, Comment alebo Article. Inštancie modelov budú samozrejme obsahovať atribúty z databázy. Inštancia modelu User bude mať napr. atribút name. Triede môžeme definovať inštančné metódy, napr. takú, ktorá vypočíta vek používateľa podľa jeho dátumu narodenia. Metódy týkajúce sa všeobecne používateľov (teda triedne) často vkladáme do modelu ako statické, napr. overenie správnej dĺžky a znakov hesla (teda jeho validáciu, pretože heslo overujeme ešte predtým, ako je inštancia používateľa vytvorená, a zároveň s používateľom logicky súvisí).

Teraz máme predstavu, čo model vykonáva, poďme sa pozrieť na pohľad.

View

Hoci sme sa s pojmom View v Django už stretli, v MVC architektúre má tento pojem iný význam. Teraz budeme teda hovoriť o všeobecnom komponente, nie o Django.

Komponent view z MVC architektúry - Základy Django frameworku pre Python View sa stará o zobrazenie výstupu používateľovi. Ide o HTML šablónu obsahujúcu HTML stránku a tagy značkovacieho jazyka Django, ktorý umožňuje do šablóny vkladať premenné, prípadne vykonávať iterácie (cykly) a podmienky. View user teda vypíše detaily o používateľovi, view article vypíše obsah článku a tak ďalej.

View máme mnoho, napr. pre funkcionalitu s entitou používateľa: user_registration, user_login, user_profile a podobne. View user_profile je ale už spoločný všetkým používateľom a sú do neho posielané rôzne dáta, vždy podľa toho, koho práve zobrazujeme. Tieto dáta sú potom dosadené do HTML elementov šablóny.

Šablóny je možné samozrejme vkladať do seba, aby sme sa neopakovali (šablóna s layoutom stránky, šablóna s menu a šablóna s článkom).

View nie je len šablóna, ale zobrazovač výstupu. Obsahuje teda len minimálne množstvo logiky, ktorá je pre výpis nutná (napr. kontrola, či si používateľ vyplnil prezývku pred jej vypísaním alebo cyklus s komentármi, ktoré sa vypisujú).

View podobne ako Model vôbec nevie, odkiaľ mu dáta prišli, stará sa len o ich zobrazenie používateľovi.

Controler

Komponent controler z MVC architektúry - Základy Django frameworku pre Python Controler je teraz ten chýbajúci prvok, ktorý osvetlí funkčnosť celého vzoru. Jedná sa o akéhosi prostredníka, s ktorým komunikuje používateľ, model aj view. Drží teda celý systém pohromade a komponenty prepája. Jeho funkciu pochopíme z ukážky životného cyklu stránky. Opäť existuje mnoho rôznych prístupov. Najčastejšie má každá entita jeden controler, máme teda UserControler, ArticleControler a tak podobne.

Životný cyklus stránky

Životný cyklus zahajuje používateľ, ktorý zadá do prehliadača adresu webu a parametre, ktorými nám oznámi, ktorú podstránku si praje zobraziť. Budeme chcieť napr. zobraziť detail používateľa s id 15. URL adresa teda bude:

User:
http://www.do­main.com/user/de­tail/15

Požiadavka ako prvá zachytí tzv. router. S tým sme sa už zoznámili. Router podľa definovaných rout pozná, ktorý controler voláme. V našom prípade voláme UserControler.

Daný controler podľa parametrov pozná, čo sa po ňom chce, teda že má zobraziť detail používateľa. Zavolá model, ktorý používateľa vyhľadá v databáze a vráti jeho údaje. Ďalej zavolá ďalšiu metódu modelu, ktorá napr. vypočíta vek používateľa. Tieto údaje si controler ukladá do premenných. Nakoniec vyrenderuje view. Názov view spoznáme podľa akcie, ktorú robíme. View sú odovzdané premenné s príslušnými dátami. Controler teda poslúchol používateľa, obstaral podľa parametrov dotazu dáta od modelu a odovzdal ich view.

View prijme dáta od controlera a vloží ich do pripravenej šablóny. Hotová stránka je zobrazená používateľovi, ktorý často o celej tejto kráse ani netuší :)

Celú situáciu môžeme znázorniť diagramom:

MVC architektúra - Základy Django frameworku pre Python

Získali sme teda oddelenie logiky od výstupu, view sú ako HTML, modely zas v Pythone. Dosiahli sme prehľadnosť kódu, ktorý je logicky rozčlenený.

MVC architektúra nám uľahčuje aj myslenie pri vývoji projektu. Keď píšeme logiku, patrí do modelu, formátovania a štylovania výstupu riešime v šablóne, to, čo používateľ chce z parametrov, zisťujeme v controleri. Tri rôzne problémy na troch rôznych miestach, oddelené tak, aby do seba nezasahovali a nerobili nám vývoj zložitejší.

MVT

Framework Django implementuje MVC architektúru presne tak, ako sme si ju popísali. Jednotlivé komponenty ale nazýva po svojom a bohužiaľ názov jednej používa na označenie odlišnej funkcionality, čo povedzme si na rovinu je mätúce:

  • Modely - modelom hovorí Django Modely,
  • Views - views hovorí Django Templates, čo je v preklade šablóny,
  • Controlers - controlerom Django hovorí Views. Nenechajme sa teda zmiasť. Keď v našej Django aplikácii tvoríme nový View, nie je to HTML šablóna, ale onen prostredník medzi Modelom a Šablónou.

V minulej aplikácii sme svoje prvé view implementovali ako metódu index(). Tá ešte nepoužívala model ani šablónu, ale iba vrátila textovú odpoveď používateľovi.

V budúcej lekcii, Kalkulačka v Django frameworku, vytvoríme svoju prvú poriadnu webovú aplikáciu v Pythone. Pôjde o jednoduchú kalkulačku.


 

Ako sa ti páči článok?
Pred uložením hodnotenia, popíš prosím autorovi, čo je zleZnakov 0 z 50-500
Predchádzajúci článok
Zoznámenie s Django frameworkom pre Python
Všetky články v sekcii
Základy Django frameworku pre Python
Preskočiť článok
(neodporúčame)
Kalkulačka v Django frameworku
Článok pre vás napísal David Hartinger
Avatar
Užívateľské hodnotenie:
5 hlasov
David je zakladatelem ITnetwork a programování se profesionálně věnuje 15 let. Má rád Nirvanu, nemovitosti a svobodu podnikání.
Unicorn university David sa informačné technológie naučil na Unicorn University - prestížnej súkromnej vysokej škole IT a ekonómie.
Aktivity