Hľadáme nové posily do ITnetwork tímu. Pozri sa na voľné pozície a pridaj sa k najagilnejšej firme na trhu - Viac informácií.
IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

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 "Ahoj svete!".

Než začneme uží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 MVC pre ASP .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é otázky, 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 - Tvorba webov v Django frameworku pre Python - Tvorba webov v Django frameworku pre Python
Model obsahuje logiku aplikácie a všetko, čo do nej spadá. Sú to oi výpočty, databázové otázky, 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 uží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 Uzivatel, Komentar alebo Clanek. Inštancie modelov budú samozrejme obsahovať atribúty z databázy. Inštancia modelu Uzivatel bude mať napr. atribút jmeno. Triede môžeme definovať inštančné metódy, napr. takú, ktorá vypočíta vek užívateľa podľa jeho dátumu narodenia. Metódy týkajúce sa všeobecne uží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 užívateľa vytvorená, a zároveň s uží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 - Tvorba webov v Django frameworku pre Python - Tvorba webov v Django frameworku pre Python
View sa stará o zobrazenie výstupu uží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 uzivatel teda vypíše detaily o užívateľovi, view clanek vypíše obsah článku a tak ďalej.

View máme mnoho, napr. pre funkcionalitu s entitou užívateľa: uzivatel_registrace, uzivatel_prihlaseni, uzivatel_profil a podobne. View uzivatel_profil je ale už spoločný všetkým uží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 uží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 užívateľovi.

Controler

Komponent controler z MVC architektúry - Tvorba webov v Django frameworku pre Python - Tvorba webov v 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 UzivatelControler, ClanekControler a tak podobne.

Životný cyklus stránky

Životný cyklus zahajuje uží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 užívateľa s id 15. URL adresa teda bude:

Uživatel:
http://www.do­mena.cz/uziva­tel/detail/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 UzivatelControler.

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 uží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 uží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á užívateľovi, ktorý často o celej tejto kráse ani netuší:)

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

MVC architektúra - Tvorba webov v Django frameworku pre Python - Tvorba webov v 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ď uží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.


 

Predchádzajúci článok
Zoznámenie s Django frameworkom pre Python
Všetky články v sekcii
Tvorba webov v 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:
2 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