LINUXSOFT.cz Přeskoč levou lištu
Uživatel: Heslo:  
   CZUKPL

> Perl (93) - Catalyst - MVC framework pro Perl

Perl V několika následujících dílech se budeme věnovat Catalystu, což je MVC framework, který si za krátkou dobu vydobyl velkou popularitu. Catalyst nabízí obrovskou paletu různých nástrojů. Naším cílem nebude kompletně ho popsat, ale spíše seznámit se s jeho filozofií.

30.11.2009 01:00 | Jiří Václavík | Články autora | přečteno 10115×

Obvyklý způsob navržení webové aplikace funguje takovým postupem, že každá stránka je generována nějakým skriptem. Tento skript nejprve získá data, dále s nimi něco udělá a na závěr vygeneruje HTML výstup. Takový postup bezesporu funguje. My si však nyní představíme jiný přístup.

MVC architektura

Model-View-Controller (MVC), pocházející původně ze Smalltalku, je způsob navržení aplikace, který ji rozděluje z hlediska programátora na tři části:

  • rozhraní pro uživatele
  • data
  • řadič

Systém funguje tak, že uživatel vyvolá nějakou událost a ta je předána řadiči, který na základě ní udělá změny v datech. Podle toho, jak se změnila data, nyní může zareagovat i rozhraní.

Přitom platí, že modifikace jedné části by neměla mít vliv na ostatní. Tedy například to, kde jsou uložená data, by nemělo mít vliv na vzhled aplikace.

K vytvoření aplikace je obecně nutné vytvořit tři komponenty, které reflektují právě popsanou architekturu.

  • View - tato komponenta rozhoduje o tom, jak se zobrazí aplikace uživateli
  • Model - reprezentace dat; může jím být v podstatě cokoliv
  • Controller - spolupracuje s modelem i uživatelským rozhraním; na základě požadavků uživatele (komponenta View) mění nebo získává data (komponenta Model)

Existuje celá řada frameworků implementujících architekturu MVC. Pro představu lze navštívit například wikipedii.

Catalyst

Catalyst je flexibilní web framework využívající architektury MVC inspirovaný zejména konkurenčním Ruby on Rails a Maypolem, který je určený pro rychlé vytváření velkých dobře udržovatelných aplikací. První verze Catalystu vznikla v roce 2005 a od té doby proběhl bouřlivým vývojem.

Catalyst lze používat na všech webových serverech s CGI nebo FastCGI. Pro testovací účely je navíc v distribuci Catalistu zahrnut i vlastní velmi jednoduchý HTTP server, který budeme používat při vývoji.

Další příjemnou vlastností je to, že bude potřeba psát minimum kódu. To ostatně uvidíme v následujících dílech.

Instalace

Je možné, že je ve vaší distribuci Catalyst již nainstalován, avšak nebývá to pravidlem. Některé distribuce ho dodávají jako balíček libcatalyst-perl.

Pokud Catalyst nainstalovaný nemáte, lze tak učinit standardním postupem pomocí perlového modulu CPAN.

$ cpan -i Catalyst::Runtime Catalyst::Devel

Obvykle se instaluje velké množství závislostí, takže celý proces může trvat i desítky minut. Pokud nastal nějaký problém, můžete se zkusit inspirovat v dokumentaci.

Vytvoření kostry aplikace

Catalyst je dodáván se shellovým skriptem catalyst.pl. Tento příkaz vytváří kostru každé webové aplikace, na kterou budeme chtít Catalyst použít. Zkusme spustit následující příkaz.

$ catalyst.pl MojeAplikace

Můžeme pozorovat, že se vytvořil adresář MojeAplikace a uvnitř něj řada souborů.

created "MojeAplikace"
created "MojeAplikace/script"
created "MojeAplikace/lib"
created "MojeAplikace/root"
created "MojeAplikace/root/static"
created "MojeAplikace/root/static/images"
created "MojeAplikace/t"
created "MojeAplikace/lib/MojeAplikace"
created "MojeAplikace/lib/MojeAplikace/Model"
created "MojeAplikace/lib/MojeAplikace/View"
created "MojeAplikace/lib/MojeAplikace/Controller"
created "MojeAplikace/mojeaplikace.conf"
created "MojeAplikace/lib/MojeAplikace.pm"
created "MojeAplikace/lib/MojeAplikace/Controller/Root.pm"
created "MojeAplikace/README"
created "MojeAplikace/Changes"
created "MojeAplikace/t/01app.t"
created "MojeAplikace/t/02pod.t"
created "MojeAplikace/t/03podcoverage.t"
created "MojeAplikace/root/static/images/catalyst_logo.png"
created "MojeAplikace/root/static/images/btn_120x50_built.png"
created "MojeAplikace/root/static/images/btn_120x50_built_shadow.png"
created "MojeAplikace/root/static/images/btn_120x50_powered.png"
created "MojeAplikace/root/static/images/btn_120x50_powered_shadow.png"
created "MojeAplikace/root/static/images/btn_88x31_built.png"
created "MojeAplikace/root/static/images/btn_88x31_built_shadow.png"
created "MojeAplikace/root/static/images/btn_88x31_powered.png"
created "MojeAplikace/root/static/images/btn_88x31_powered_shadow.png"
created "MojeAplikace/root/favicon.ico"
created "MojeAplikace/Makefile.PL"
created "MojeAplikace/script/mojeaplikace_cgi.pl"
created "MojeAplikace/script/mojeaplikace_fastcgi.pl"
created "MojeAplikace/script/mojeaplikace_server.pl"
created "MojeAplikace/script/mojeaplikace_test.pl"
created "MojeAplikace/script/mojeaplikace_create.pl"
Change to application directory and Run "perl Makefile.PL" to make sure your install is complete

Uveďme ještě, že obsahovalo-li by jméno aplikace čtyřtečky, nahradily by se lomítkem a vznikla by adresářová struktura.

Význam vytvořených souborů

Přímo v adresáři MojeAplikace je soubor mojeaplikace.conf, což je klasický konfigurační soubor pro aplikaci používající Apache syntaxi. Někdy zde místo něj je soubor se stejnou funkcí s koncovkou .pl nebo .yml, kde mají konfigurační příkazy jiný tvar.

Soubor Makefile.PL slouží k vygenerování Makefile pro build naší aplikace.

Dále zde jsou soubory jako README a Changes, které mají standardní význam.

Také je zde několik důležitých adresářů. Sem patří i lib, kde jsou uloženy moduly pro Controller, View a Model. Již zde existuje soubor MojeAplikace.pm, což je základní modul naší aplikace; dále adresář MojeAplikace, který obsahuje adresáře Controller, Model a View. Zde bude mít aplikace uložené komponenty všech tří typů, které později budeme vytvářet. Jak vidíme, je zde již Controller Root.pm, který se stará o úvodní stránku aplikace.

V adresáři root je skladiště šablon. Podadresář static se používá většinou k uchovávání obrázků, souborů ke stažení nebo CSS.

Adresář t slouží k ukládání testů. Na začátku jsou zde vytvořené 3 testy: 01app.t pro test, zda se aplikace zkompiluje a 02pod.t a 03podcoverage.t pro účely dokumentace.

Nyní nás bude velmi zajímat adresář script obsahující několik perlových skriptů s různými účely.

Spuštění testovacího serveru a další skripty

Soubor script/mojeaplikace_server.pl je jednoduchý HTTP server, který můžeme používat při vývoji aplikace. Tento server spustíme standardním způsobem. Na obrazovce by se měl objevit výstup podobný následujícímu.

$ perl mojeaplikace_server.pl
[debug] Debug messages enabled
[debug] Statistics enabled
[debug] Loaded plugins:
.----------------------------------------------------------------------------.
| Catalyst::Plugin::ConfigLoader  0.27                                       |
| Catalyst::Plugin::Static::Simple  0.22                                     |
'----------------------------------------------------------------------------'

[debug] Loaded dispatcher "Catalyst::Dispatcher"
[debug] Loaded engine "Catalyst::Engine::HTTP"
[debug] Found home "/home/test/MojeAplikace"
[debug] Loaded Config "/home/test/MojeAplikace/mojeaplikace.conf"
[debug] Loaded components:
.-----------------------------------------------------------------+----------.
| Class                                                           | Type     |
+-----------------------------------------------------------------+----------+
| MojeAplikace::Controller::Root                                  | instance |
'-----------------------------------------------------------------+----------'

[debug] Loaded Private actions:
.----------------------+--------------------------------------+--------------.
| Private              | Class                                | Method       |
+----------------------+--------------------------------------+--------------+
| /default             | MojeAplikace::Controller::Root       | default      |
| /end                 | MojeAplikace::Controller::Root       | end          |
| /index               | MojeAplikace::Controller::Root       | index        |
'----------------------+--------------------------------------+--------------'

[debug] Loaded Path actions:
.-------------------------------------+--------------------------------------.
| Path                                | Private                              |
+-------------------------------------+--------------------------------------+
| /                                   | /index                               |
| /                                   | /default                             |
'-------------------------------------+--------------------------------------'

[info] MojeAplikace powered by Catalyst 5.80013
You can connect to your server at http://hostname:3000

Tím jsme spustili server. Pokud uděláme změny v adresáři lib, bude třeba webový server restartovat. Pokud však spustíme server s parametry -d -r, bude se o změny starat již spuštěný server sám.

$ perl mojeaplikace_server.pl -d -r

Dále jsou zde skripty mojeaplikace_fastcgi.pl a mojeaplikace_cgi.pl pro spuštění na jiném serveru.

Skript mojeaplikace_test.pl tiskne zdrojový kód požadované stránky bez spuštění serveru a dá se tedy použít na testování. Například pro výpis stránky /nejaka/cesta bychom použili následující příkaz.

$ perl mojeaplikace_test.pl /nejaka/cesta

Na konci výstupu vidíme zdrojový kód Page not found, což je správně, protože jsme zatím nic nevytvořili. Zkusme však otestovat kořenový adresář. Zde by se měl zobrazit zdrojový kód přednastavené webové stránky.

$ perl mojeaplikace_test.pl /

Úvodní stránka

Podívejme se ještě na výstup, který jsme dostali po spuštění serveru. Na konci je uvedena adresa http://hostname:3000, na níž se nám spustil webový server. Můžeme ji tedy zadat do webového prohlížeče a měli bychom spatřit úvodní stránku.

Úvodní obrazovka po spuštění webového serveru vygenerovaná Catalystem

Verze pro tisk

pridej.cz

 

DISKUZE

Nejsou žádné diskuzní příspěvky u dané položky.



Příspívat do diskuze mohou pouze registrovaní uživatelé.
> Vyhledávání software
> Vyhledávání článků

15.5.2017 23:50 /František Kučera
Máš rád svobodný software a hardware nebo se o nich chceš něco dozvědět? Zajímá tě DIY, CNC, SDR nebo morseovka? Přijď na sraz spolku OpenAlt, který se bude konat ve čtvrtek 18. května od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5).
Přidat komentář

12.5.2017 16:42 /Honza Javorek
PyCon CZ, česká konference o programovacím jazyce Python, se po dvou úspěšných ročnících v Brně bude letos konat v Praze, a to 8. až 10. června. Na konferenci letos zavítá např. i Armin Ronacher, známý především jako autor frameworku Flask, šablon Jinja2/Twig, a dalších projektů. Těšit se můžete na přednášky o datové analytice, tvorbě webu, testování, tvorbě API, učení a mentorování programování, přednášky o rozvoji komunity, o použití Pythonu ve vědě nebo k ovládání nejrůznějších zařízení (MicroPython). Na vlastní prsty si můžete na workshopech vyzkoušet postavit Pythonem ovládaného robota, naučit se učit šestileté děti programovat, efektivně testovat nebo si v Pythonu pohrát s kartografickým materiálem. Kupujte lístky, dokud jsou.
Přidat komentář

2.5.2017 9:20 /Eva Rázgová
Putovní konference československé Drupal komunity "DrupalCamp Československo" se tentokrát koná 27. 5.2017 na VUT FIT v Brně. Můžete načerpat a vyměnit si zkušenosti z oblasti Drupalu 7 a 8, UX, SEO, managementu týmového vývoje, využití Dockeru pro Drupal a dalších. Vítáni jsou nováčci i experti. Akci pořádají Slovenská Drupal Asociácia a česká Asociace pro Drupal. Registrace na webu .
Přidat komentář

1.5.2017 20:31 /Pavel `Goldenfish' Kysilka
PR: 25.5.2017 proběhne v Praze konference na téma Firemní informační systémy. Hlavními tématy jsou: Informační systémy s vlastní inteligencí, efektivní práce s dokumenty, mobilní přístup k datům nebo využívání cloudu.
Přidat komentář

15.4.2017 15:20 /František Kučera
Máš rád svobodný software a hardware nebo se o nich chceš něco dozvědět? Zajímá tě IoT a radiokomunikace? Přijď na sraz spolku OpenAlt, který se bude konat ve středu 19. dubna od 18:30 v Šenkovně (Sokolská 60, Praha 2).
Přidat komentář

5.3.2017 19:12 /Redakce Linuxsoft.cz
PR: 23. března proběhne v Praze konferenci na téma Cloud computing v praxi. Hlavními tématy jsou: Nejžhavější trendy v oblasti cloudu a cloudových řešení, Moderní cloudové služby, Infrastruktura současných cloudů, Efektivní využití cloudu, Nástrahy cloudových řešení a jak se jim vyhnout.
Přidat komentář

27.2.2017 22:12 /František Kučera
Pozvánka na 137. sraz OpenAlt – Praha: Tentokrát jsme si pro vás připravili neobvyklou akci. Ve středu 1.3. v 17:30 nás přivítá sdružení CZ.NIC ve svých prostorách v Milešovské ulici číslo 5 na Praze 3, kde si pro nás připravili krátkou prezentaci jejich činnosti. Následně navštívíme jejich datacentrum pod Žižkovskou věží. Provedou nás prostory, které jsou běžnému smrtelníkovi nedostupné!
Po ukončení prohlídky se všchni odebereme do hostince U vodoucha, Jagelonská 21, Praha 3 pochutnat si na některém z vybraných piv či dát si něco na zub. Rezervaci máme od 19:30, heslo je OpenAlt.
Ale pozor! Do prostor datového centra máme omezený přístup, dostane se tam pouze 10 lidí! Takže kdo přijde dříve, ten má přednost, a občanky s sebou! Kdo nebude chtít na prohlídku datového centra, může se pomalu přesunout do hostince U vodoucha a u nepřeberné nabídky piv počkat na ostatní.
Přidat komentář

18.1.2017 0:49 /František Kučera
Členové a příznivci spolku OpenAlt se pravidelně schází v Praze a Brně. Fotky z pražských srazů za uplynulý rok si můžete prohlédnout na stránkách spolku. Příští sraz se koná už 19. ledna – tentokrát je tématem ergonomie ovládání počítače – tzn. klávesnice, myši a další zařízení. Také budete mít příležitost si prohlédnout pražský hackerspace Brmlab.
Přidat komentář

   Více ...   Přidat zprávičku

> Poslední diskuze

1.8.2017 7:32 / Cassidy
structural consultants

30.7.2017 11:12 / Jaromir Obr
Národní znaky

27.7.2017 12:24 / Jaromir Obr
Cteni/zapis

26.7.2017 21:12 / Jaromir Obr
Podminka

15.6.2017 9:34 / Ondřej Havlas
php,

Více ...

ISSN 1801-3805 | Provozovatel: Pavel Kysilka, IČ: 72868490 (2003-2017) | mail at linuxsoft dot cz | Design: www.megadesign.cz | Textová verze