Je to už nějaký čas, co se věnuji programování webových aplikací (samozřejmě v Pythonu :). Kdysi jsem začínal s Django ale postupně jsem od něj odcházel, až jsem přešel na Flask. Oba framworky jsou od sebe dost odlišné. Už jen proto, že Django je tzv. „full stack“ framework (obsahuje velké množství funkcí v jednom balíku), kdežto Flask je tzv. „micro framework“ (request, response, url dispatch a šablonovací systém). Ideální ale pro mě není ani jeden. Proč? Na to se pokusím odpovědět v následujícím textu.
Django je výborný framework na aplikace střední a menší velikosti. Mezi jeho největší přednosti patři konzistentní a dobře navržené API, kvalitní dokumentace a množství programátorů, kteří ho používají. To, že se jedná o full stack framework je předností i slabinou. Pro mě bohužel víc to druhé…
Django totiž nabízí (na můj vkus) velice obecné ORM, které je přesně tím důvodem proč mnozí programátoři ORM nechtějí používat. Omezuje nás totiž ve využití maximálního potenciálu konkrétního typu databáze (např. PostgreSQL, Oracle). Z hlediska Djanga je obecný ORM pochopitelný: poskytuje stejné rozhraní všem, což se hodí, pokud programujete např. rozšíření. Často se obecné ORM obhajuje snadnou přenositelností napříč datábázemi. To pokládám za nesmysl: jak často projekt přechází např. z Oracle na PostgreSQL?
Obecné ORM je prostě zlo. Django a Drupal 7 si v tomhle můžou podat ruce…
Ergo, pokud ORM, tak jedině SQLAlchemy. Mnozí z vás určitě namítnou, že můžu dělat alchymii i v Django. Ano, můžu. Ale je to pořád „workaround“, který nemusí být vždy stabilní.
Další zklamání v řadě je integrovaný šablonovací systém. Né že by syntaxe byla špatná, ta je naopak úžasná. Ale Jinja2 je prostě lepší. Je rychlejší, poznáte v ní kdy voláte funkci a kdy přistupujete k proměnné, filtry umožňují více než jeden parametr, atd.
Sečteno a podtrženo, pro projekty, kde Django stačí je Django dobré. Seženete lidi, budete mít přehledný kód a ještě k tomu stihnete i ten deadline. Pokud ale chcete víc, musíte se porozhlédnout dál…
Flask je tak trochu malý zázrak. Malý proto, že je to mikro framework a zázrak proto, že psaní webových aplikací může být i pro začátečníka přehledné a srozumitelné. Z původního vtípku Armina Ronachera tak vyrostl poměrně dobře použitelný software.
Jeho obrovskou výhodou je, že slouží hlavně jako lepidlo. Programátor si může sám zvolit, která rozšíření potřebuje a použije. V základu má k dispozici jen funkce pro práci s URL (mapování je čitelnější než v Django), HTTP (request, response) a šablonami (jinja2, mimochodem taky od Armina). Flask přitom stojí na HTTP knihovně Werkzeug (taky od stejného autora). Nic víc, nic míň.
Pokud chcete do svého projektu zahrnout podporu databází, je potřeba sáhnout po Flask-SQLAlchemy, pokud potřebujete formuláře, pak můžete využít Flask-WTF, pro autentizaci Flask-Login atp. Zkrátka puzzle.
Celá tahle sranda má ale pár háčků.
Přesto se Flask těší čímdál větší oblibě, o které svědčí i rozšiřující se pracovní nabídky (např. Seznam.cz, a.s.). Pro malé a střední projekty s potřebou individuálního řešení se může jednat o skvělý nástroj.
Zatím neexistuje.
Ideální framework by měl (ideálně) brát to nejlepší z toho co je, a přidat k tomu něco svého. Určitě by měl být „full stack“, aby se vyhnul desítkám závislostí a vytvořil dobré zázemí pro programátory.
Rámec by měl obsahovat:
Inu, myšlenek je hodně, tak uvidíme. Třeba se něco časem objeví… Nu a kdybyste si opravdu nevěděli rady, zeptejte se náhody:
import random
print(random.choice(['Flask', 'Django', 'Pyramid']))
- nie je lepsie aby staticke data serviroval server (apache / nginx) a framework sa obisiel kvoli rychlosti?
- z veci ktore pises djangu chyba iba SQLAlchemy, jinja2 a traversal.., ja som s alchemy robil a uprimne s django modelmi sa mi robi o nieco lepsie (je pravda, ze s nimi nerobim nijake extra komplikovane veci, takze je to mozno blbe porovnanie), s traversal-om som nerobil, ale pouzivam v djangu dva postupy, ktore podla mna dost nahraduju vsetok jeho use-case: v url pattern-och name='' nastavujem podla vyslednej url-ky a v model-och mam property nazvane "url_edit", "url_view" apod., ktore volaju spravnym stylom reverse().. a existuje viacero (django-jinja, coffin) kniznic, ktore umoznuju v djangu jinja2 templaty pouzivat...
Ad Django: Django 1.8 podporuje Jinja2. ORM je skvele pro prototypovani, pro vyuziti specifickych vlastnosti DB nebo optimalizaci pak mozno pouzit raw queries. SqlAlchemy neni problem napr. s Aldjemy, jestli jste realne narazil na to, ze "nemusí být vždy stabilní" doporucuji bugreport + fork + patch + pull request ;)
@[1]: určitě je :) ale u menších projektů je to zbytečná práce navíc a lepší je použít statická data přímo ve fw + cache přes HTTP hlavičky.
@[2]: Právě že SQLAlchemy umožňuje psát dotazy optimalizované na konkrétní typ databáze i bez raw sql (i když i ten lze samozřejmě použít). Podle mého názoru to určitě přispívá k čitelnosti kódu více, než ORM u Django. Každý má ale jiné preference no...
Ja som velmi spokojny s http://turbogears.org/ - dobre zdokumentovany a splna velku cast z uvedenych poziadaviek (myslim ze vsetko okrem debug toolbaru)
My nyní používáme web.py a Tornado. web.py je geniálně navržené > je prostě přímočaré a dělá to co má. U Tornado nejsem zatím tak moc přesvědčen, je to rychlé to ano, ale nevím co se bude dít, až bude potřeba mnohem více řádek třeba 5 až 6x tolik, stane se to nepřehledné zřejmě trochu. Bohužel pro web.py, zdá se že už se to přestalo vyvíjet.
Totiž, kdyby takový framework vzniknul, tak to bude vpodstatě druhé django, a budou vznikat příspěvky podobné tomuto. Např. já nechci jinja2, ale mako, já nechci sqlalchemy, ale teďnevímco, já nechci cron ale rabitmq, a tak podobně.
Z toho pohledu je pro mě nejlepší pyramid, protože mi umožňuje vybrat si to, co potřebuju, ale to je i jeho nevýhoda: člověk si musí vybrat to, co potřebuje. Nakonec, někde jsem myslím četl, že pyramid nebude Váš první framework.
@[6]: já mám na intranetu pylons 1 a pyramid jako service pomocí toho vývojového serveru ve dvou instancích a apache jako rev proxy. Není to sice flask, ale může to fungovat podobně.
@[8]: no, to my snad nikdo nelitujeme :-)
@[6]: Jako produkční wsgi server používáme všude Gunicorn (http://gunicorn.org/) + nginx. Gunicorn je hodně povedený.
Možností je více. Je tu třeba uWSGI (https://uwsgi-docs.readthedocs.org/en/latest/).
Nevím zda běží ve win. možná v cygwinu.
Velmi příjemný mikro-framework, který je neprávem opomíjen je Bottle (http://bottlepy.org/)
Vykrik do tmy ? Cistota a jednoduchost Flasku se mi sice taky moc libi, ale delat v tom cokoliv vetsiho je zlo. V lepsim pripade roubujete dohromady malo odladene a navzajem nekonzistentni baliky tretich stran, v horsim implementujete neco co uz davno nekdo udelal a sezere vam to hrozne casu plus nasledna udrzba.
Django je sice svym zpusobem Behemoth, ale porad je hodne primocary a spousta funkcionality jde priohnout nebo vypustit kdyz neni potreba. Jak uz tu nekdo zminil Railsy, jsou sice nabite featurami, ale jejich filozofie konvence misto konfigurace je peklo, kdyz vyzadujete specificke chovani ktere neni prednastavene a hledat proc neco (ne)funguje nebo funguje jinak nez ocekavate pres metaprogramovaci magie a obdobne "cerne skrinky" je zazitek na hodiny a dny.
Zabyvam se programovanim zakazkovych webovych aplikaci uz dlouho a Django porad povazuju za "zlatou" stredni cestu (ve spojeni s Mezzanine).
Programuji v Pythonu, občas v C, občas (s velkým sebezapřením v PHP). Zarytý UNIXák, Opavák, konzervativec.