Výběr frameworku je vždy náročný úkol. V Pythonu jsou nejznámější webové frameworky Django a Flask, který ale vybrat? Vyzkoušeny mám oba pro velké projekty za různých okolností a nemám výherce. Každý je dobrý k něčemu jinému. V Ruby je podobná volba Rails nebo Sinatra. To, že nemám výherce, ale neznamená, že nevím, po kterém sáhnout. Naopak dnes už to vím přesně. Popíšu na dvou případech:
1) Když jsem začínal BOObook.cz, neměl jsem nic a potřeboval jsem rychle něco mít. Sáhl jsem po Djangu, připravil projekt, a ještě tu noc jsem měl základní kostru se šablonami, formuláři, modelem, databází, sessionou a administrací. Mohl jsem se zaměřit na featury a jakmile něco nevyhovovalo, postupně měnit za svůj kód. Například vyměnit/upravit administraci, vlastní servírování souborů chráněné přihlášením a podobně.
2) Když jsme si v práci řekli, že je na čase přejít na open source framework (z našeho interního z dob, kdy ještě nic takového neexistovalo), sáhli jsme po Flasku. Měli jsme totiž vše a Flask nemá nic. Díky tomu nám dovolil ho použít ihned a postupně přecházet na nové šablony, formuláře, modely, session atp. Byl to sice komplikovanější proces, než začít paralelně na zelené louce, jenže přepsat celou aplikaci by trvalo roky. Nyní máme přechod za sebou a funguje nám jak nová, tak stará, ještě nepřepsaná, část aplikace.
Co to tedy znamená?
Django je all-in-one balíček. Od routingu, přes modely a formuláře až po šablony. Samozřejmě nechybí spoustu šikovných či dokonce potřebných utilit. Tedy nainstalujete, přečtete si dokumentaci, první ukázku a můžete se zaměřit na vaši aplikaci.
Flask je naopak vlastně jen routing a vše se musí poskládat z dalších knihoven dle potřeby. Často Jinja, WTForms, SQLAlchemy a další. Tedy nainstalujete, přečtete si dokumentaci a hledáte best practices, jak komponenty poskládat dohromady pro vaši potřebu.
Z toho vyplývá mé doporučení: pokud nemusíte použít nějaké vlastní komponenty, je lepší sáhnout po Djangu. Díky tomu se lze zaměřit na vývoj webové aplikace a neřešit, jak validovat vstupní data, jak si držet sessionu, jak přistupovat k databázi a dalším zdrojům, … S jednou výjimkou – Django je kanón na vrabce, takže nemá smysl se ho držet pro opravdu miniaturní webovou stránku.
Co Rails vs. Sinatra?
Tam to vidím stejně. S tím, že Django se jmenuje Rails a Flask je Sinatra.
Jediný rozdíl vidím ve výjimce. Chtěl jsem se podívat, co zajímavého nabízí Ruby, a tak ho využil pro jedno API k mému novému pet projektu. Jelikož se jedná o SPA a veškerý kód je v JavaScriptu, sáhl jsem po Sinatře. Což byla asi chyba, jelikož jako ve světe JavaScriptu často lidi radí, jak problém vyřešit s jQuery, ve světe Ruby naopak radí, jak problém vyřešit s Rails. Je pak těžké najít čisté Ruby. Na druhou stranu s Rails bych nevěděl, co znamená čisté Ruby. :-)