Některé frameworky, například
Flask, mají moc pěkný způsob jak ve vaší webové aplikaci říct, že právě tato funkce, nebo metoda, se bude starat o danou url. To se provádí na základě
dekorátorů. To je moc zajímavý, užitečný a hezký způsob jak nějakou funkci, nebo metodu obalit jinou složitější funkcionalitou.
Route dekorátory jsou cool 8-)
from framework import route
@route('/tahle/cesta')
def tahle_cesta():
yield „Ahoj svete\n“
yield „Tuhle cestu obsluhuje tahle funkce“
Jak jistě každý uzná, toto je prostě cool. A i mě osobně se to fakt moc líbí. Pokud je aplikace ideálně v jednom souboru, a takových může být tisíce, proč ne ? Osobně mám pár stránek, které z nějakého důvodu generuji v pythonu až při požadavku, a přitom povinnost mít extra tabulku o několika málo záznamech, kde cestě přiřazuji nějaký handler – funkci je prostě zbytečné, otravné a neefektivní.
A to je také důvod, proč sem se rozhodl provést pár změn ve svém wsgi rozhraní
poorwsgi, a dovolit uživatelům (moc jich asi nebude, osobně znám jen jednoho :D) onu nudnou tabulku plnit takovým elegantním dekorátorem. Do budoucna tedy nebude nutné tabulku plnit ručně, ale bude mi ji plnit dekorátor sám. S tím ale přinese poorwsgi další novinku, speciální ladící stránku, na které vedle stávajícího nastavení (velikost bufferu, logování atd, zobrazí i obsah této tabulky, tak, jak by ji mohl uživatel vytvořit ručně).
Route dekorátory jsou zlo :@
Jak je toto řešení krásné, tak je špatné. Celý problém nastává u složitější aplikace. V případě použití tabulky prostě musíte mít jeden výchozí soubor, ve kterém tuto tabulku máte, a při prvním pohledu, snadno vidíte, jaká funkce, případně v jakém souboru je za danou cestu odpovědná.
Ano toto lze řešit ukázněností, správným pojmenováním, ale ani tak se nemusíte vyhnout situaci, kdy máte tyto routy – cesty – kusy url rozseté po 10ti a více souborech. To pořád není příliš velká aplikace, ale je už dost velká, aby mohl být problém se snadno zorientovat.
Nehledě na to, že stejně musíte mít jeden výchozí soubor, ve kterém importujete všechny další soubory, které tyto deklarace cest máte. Stačí jeden vynechat a můžete mít problém, a hledat můžete třeba celý víkend, než vás v pondělí ráno u čtení cizího ranního tisku přes rameno trkne, kde je zakopaný pes.
Pořád nerozumíte co sem Vám, laskavému čtenáři, chtěl zdělit ? :-(
Ke všemu přistupujte s mírou, nebo alespoň s Filipem ;) Je třeba si uvědomit hned v počátku, že každé řešení má svůj rub i líc. A příliš velké nadchnutí pro jednu krásnou cool a navíc super užitečnou věc, může působit nemalé problémy a následné přepisování půlky aplikace. Rozhodně se nechci nijak dotknout libovolného frameworku, který tyto dekorátory používá, a nemá zadní vrátka tak, jako to bude mít poorwsgi. Každému se hodí něco jiného, a každý má jiné chutě, a je jinak masochistický.
Pokud by se snad někomu poorwsgi líbil natolik, že by ho i použil, pod podmínkou že by něco uměl, bude super, když se ozve ;-)