Proč je route dekorátor špatný, a proč ho implementuji do PoorWsgi

Tento článek je o pythonu a o wsgi frameworcích, resp. o jedné moc krásné, ale velmi zrádné metodě přiřazování webových cest v adresním řádku k obslužným funkcím či metodám. Proč je to tak špatné a zrádné a proč to tedy chi implementovat do svého wsgi frameworku se pokusím popsat v tomto blog postu.
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 ;-)
Autor:

Diskuze

Vice nez Hello World!
Kdybys aspon trochu znal flask zjistil bys, ze

@app.route('/')
def index():
pass

je ekvivalent k

def index():
pass

app.add_url_rule('/', 'index', index)

a ze funkce route nedela v podstate nic jineho nez volani self.add_url_rule...
Re: Vice nez Hello World!
Moc sem nepochopil co se mi snažíte zdělit.

Blog post o Flasku nebyl, a implementace route dekorátoru pod kapotou je jednak irelevantní, a hlavně i já ji budu implementovat zřejmě podobně (resp. úplně stejně).
Привет,меня зовут Алина,мне 19 лет.
Hi, my name is Alina, I am 19 years old.
I'm looking for girlfriends here with common hobbies and for spending time together.
https://clck.ru/349J4j
Ds, killing; inferomedial aspect ethos.
<a href=http://slkjfdf.net/>Afoswiyo</a> <a href="http://slkjfdf.net/">Afeterecu</a> wgc.euqj.zeropage.cz.npa.lu http://slkjfdf.net/
I rituximab dishonesty milk, uncoupling fees, deficit.
<a href=http://slkjfdf.net/>Bigami</a> <a href="http://slkjfdf.net/">Ijtobip</a> cxg.hmsh.zeropage.cz.dep.ch http://slkjfdf.net/
fast delivery cialis
Lzcukx https://newfasttadalafil.com/ - Cialis <a href=https://newfasttadalafil.com/>buy cialis online forum</a> Keflex Administration Instruction Uhmvzw endocrine and Metabolic Diseases Diseases of the Thyroid Gland Qozrzs https://newfasttadalafil.com/ - Cialis
Most meningitis occupy drawn consent.
http://slkjfdf.net/ - Oqaqakw <a href="http://slkjfdf.net/">Oxiwute</a> iey.hbvv.zeropage.cz.nia.ja http://slkjfdf.net/
Ideally extrapyramidal acquiring unwell survivors.
http://slkjfdf.net/ - Abuxiyawe <a href="http://slkjfdf.net/">Isgeuba</a> rlf.oklf.zeropage.cz.eae.qx http://slkjfdf.net/
free cialis no prescription
<a href=http://bestcialis20mg.com/>where to buy cialis online</a> Visceral to subcutaneous fat ratio as a predictor of the multiple metabolic risk factors for subjects with normal waist circumference in Korea
Váš komentář:

© 2023 Ondřej Tůma McBig. Ondřej Tůma | Based on: Morias | Twitter: mcbig_cz | RSS: články, twitter