Pajton je istovremeno zabavna igračka i zastrašujući bacač plamena. Slično važi i za mogućnosti koje pruža.
Pajton podjednako privlači hobiste, naučnike i softverske arhitekte.
Sa njim je neverovatno lako početi, nudi apstrakcije visokog nivoa i metaprogramiranje za izgradnju obimnih i kompleksnih sistema, a poseduje i bogate biblioteke za gotovo sve. Naravno, postoje ograničenja u pogledu konkurentnosti i statičkog tipiziranja, ali se i ona mogu prevazići.
U ovom tekstu ćemo razmotriti neke od najistaknutijih Pajton frejmvorka za razvoj web aplikacija, bilo da su male ili velike.
Džango
Džango frejmvork je vremenom stekao veliki ugled u Pajton zajednici. Ako biste probudili Pajton programera iz sna i naterali ga da napravi web aplikaciju pod pretnjom, on bi automatski posegnuo za Džangom, baš kao što bi Ruby programer izabrao Rails.
I to sa dobrim razlogom. Džango, kao što i slogan kaže, jeste „web frejmvork za perfekcioniste koji rade pod pritiskom rokova“. To je takozvani „batteries included“ frejmvork, što znači da nudi svu standardnu funkcionalnost odmah po instalaciji.
Zahvaljujući ovim ugrađenim funkcijama, Džango značajno ubrzava proces razvoja:
- Intuitivan i jednostavan ORM (Object-Relational Mapping), sa migracijama koje se kreiraju i primenjuju automatski.
- Automatsko generisanje administrativnog panela na osnovu vaših modela.
- Podrška za kolačiće, sesije, middleware, templejte itd.
- Automatska primena bezbednosnih funkcija kao što su zaštita od XSS napada, CSRF napada itd.
- Kompatibilnost sa gotovo svim bazama podataka (lako je pronaći adaptere i tamo gde nema zvanične podrške).
- Izvrsna podrška za geografske podatke i prostorne upite, zahvaljujući GeoDjango.
I još mnogo toga. Dovoljno je reći da je Džango potpuno razvijen i vrlo pristupačan web frejmvork.
Da li je Džango pravi izbor za vas?
Apsolutno. Džango je odličan za različite scenarije upotrebe, bilo da je reč o brzom prototipu ili razvoju poslovne aplikacije. Jedina prepreka koju ćete možda primetiti jeste njegova struktura. Budući da je Džango dizajniran da razvoj učini brzim i jednostavnim, on programeru nameće svoju strukturu (koncept koji se naziva „konvencija pre konfiguracije“), sa čime se možda nećete uvek složiti. Na primer, ako želite da zamenite Džangov ORM nečim drugim (na primer, SQL Alchemy), budite spremni na neočekivane izazove.
Želite da postanete full-stack programer sa Džangom i Pajtonom? Pogledajte ovaj odličan online kurs.
Flask
Dok Džango dominira u Pajton web razvoju, Flask je jak konkurent.
Za razliku od Džanga, Flask je „mikro-frejmvork“, što znači da se fokusira na nekoliko ključnih funkcionalnosti, a ostalo prepušta programeru. Ovaj pristup može biti izvor frustracije ili zadovoljstva, u zavisnosti od vaših ciljeva. Za one koji znaju šta rade i žele da kreiraju svoje web aplikacije pažljivo birajući komponente, Flask je idealno rešenje.
Flask nudi sledeće karakteristike:
- Rutiranje, templejtiranje, upravljanje sesijama i druge korisne funkcije.
- Potpunu podršku za unit testiranje.
- Minimalističku arhitekturu koja se može proširivati.
- Odličnu REST podršku.
- Podršku za Blueprint-ove, jedinstven Flask pristup arhitekturi za manje web aplikacije.
- Mogućnost izbora paketa za ORM, migracije itd.
- Fleksibilnu strukturu aplikacije – rasporedite datoteke tamo gde vam najviše odgovara.
- Serviranje statičkih fajlova.
- Usklađenost sa WSGI standardom.
Da li je Flask pravi izbor za vas?
Kao što je već rečeno, Flask je minimalistički web frejmvork, gde je sve podeljeno na pojedinačne komponente koje možete zameniti. Ako žurite sa prototipom, možda ćete potrošiti previše vremena donoseći odluke o bazi podataka, strukturi foldera, rutiranju itd., što može biti kontraproduktivno. Flask je najpogodniji za stabilne i ozbiljne projekte srednjeg do velikog obima, posebno za REST API-je.
Bottle
Ako mislite da Flask nije dovoljno minimalistički i da želite još više kontrole, upoznajte Bottle.
Bottle je još minimalističkiji, do te mere da je jedina zavisnost standardna Pajton biblioteka. To znači da nema potrebe za instalacijom dodatnih paketa, iako ćete ih verovatno uskoro trebati. Bottle se izdvaja po sledećim karakteristikama:
- Implementacija u jednom fajlu. Da, cela vaša aplikacija se nalazi u jednoj „.py“ datoteci.
- Nema spoljnih zavisnosti. Ako imate instaliranu odgovarajuću verziju Pajtona, spremni ste.
- Nudi sopstveni mehanizam za templejte, koji se može zameniti sa Jinja2, Mako ili Cheetah.
- Podrška za forme, zaglavlja, kolačiće i učitavanje fajlova.
- Ugrađeni web server, koji se lako može zameniti.
Da li je Bottle pravi izbor za vas?
Ako kreirate zaista malu aplikaciju (recimo, manje od 500 linija koda) bez posebnih zahteva, Bottle bi mogao biti dobar izbor. To je potpuno minimalistički pristup izradi web aplikacija, ali ćete u praksi verovatno shvatiti da vas Bottle više ometa nego što vam pomaže. Razlog je što se realni svet stalno menja, i pre nego što se snađete, pojaviće se novi zahtevi. U tom trenutku, smeštanje svega u jednu datoteku postaje naporno.
Takođe, ako mislite da su Bottle i Flask gotovo isti, u pravu ste. Predlozi o spajanju ova dva frejmvorka datiraju iz 2012. godine, i sa tim se slaže i Armin, kreator Flask-a. Međutim, Marsel, kreator Bottle-a, insistira na strogoj ideološkoj razlici zbog pristupa sa jednim fajlom i smatra da je neophodno da ostanu odvojeni.
Zope
Zope je malo komplikovan za objašnjenje, ali pokušaću. Da, to je web frejmvork koji se može koristiti za izradu velikih i malih aplikacija, ali to nije sve. Zope je više platforma koja se sastoji od alata (uključujući web frejmvorke) kreiranih prema Zope filozofiji i održavanih od strane Zope Corporation.
Zope ima nekoliko zanimljivih komponenti i funkcija pogodnih za razvoj poslovnih aplikacija:
- Arhitektura za registrovanje i pronalaženje komponenti za konfigurisanje velikih aplikacija.
- ZODB – (jedina) objektna baza podataka za Pajton za nativno skladištenje objekata.
- Sveobuhvatan frejmvork i standardi za sisteme za upravljanje sadržajem.
- Skup web aplikacija – kanonski se i dalje naziva Zope, iako je nekoliko novih frejmvorka (kao što je Grok) izgrađeno na njemu.
- Snažni standardi za razvoj, puštanje u rad i održavanje softvera.
Da li je Zope pravi izbor za vas?
Ako tražite visoko strukturirano okruženje za razvoj zaista velikih aplikacija, Zope je dobar izbor. Međutim, naići ćete i na određene probleme. Iako se Zope nastavlja razvijati, zajednica je relativno mala, do te mere da mnogi Pajton programeri nisu ni čuli za njega. Pronalaženje tutorijala i opsežne dokumentacije je teško, pa budite spremni na temeljno istraživanje (iako je zajednica vrlo predusretljiva!). Takođe, Pajton programeri sa kojima sarađujete možda neće biti spremni da uče Zope i „razvodnjavaju“ svoje veštine.
TurboGears
TurboGears je vrlo fleksibilan frejmvork sa arhitekturom koja se može prilagođavati. To je frejmvork koji se prilagođava vašim potrebama, i možete ga koristiti za razvoj aplikacija sa jednom datotekom ili višenamenskog sistema.
TurboGears ima nekoliko elegantnih karakteristika, od kojih neke ili nisu prisutne u popularnim frejmvorkovima (kao što je Džango) ili ih je teško implementirati:
- Odlična podrška za više baza podataka.
- Transakcije sa više baza podataka.
- Veoma modularan – počnite sa jednom datotekom i proširujte je po potrebi.
- Moćan ORM (SQLAlchemy, koji je zreliji i sposobniji od Džangovog ORM-a).
- Arhitektura zasnovana na WSGI specifikaciji.
- Ugrađena podrška za deljenje baza podataka.
- Interfejs zasnovan na funkcijama za razliku od krutih, objektno orijentisanih hijerarhija.
Da li je TurboGears pravi izbor za vas?
Ako želite da razvijate zadovoljno i tražite testiran, zreo i robustan frejmvork koji nije opterećen medijskom bukom o „neverovatnom, sledećem generacijskom“ rešenju, TurboGears je odličan izbor. Veoma je cenjen u zajednici i ima kompletnu, opsežnu dokumentaciju. Naravno, TurboGears nije „tvrdoglav“, što znači da početno podešavanje i konfiguracija mogu trajati duže, ali je idealan frejmvork za razvoj poslovnih aplikacija.
Web2py
Web2py je započeo kao hobi projekat i objavljen je 2007. godine. Njegov cilj je da razvoj web aplikacija učini lakim i dostupnim svima.
Kao rezultat toga, Web2py ide do ekstrema u pristupu sa nultom zavisnošću – nema nikakvih zahteva, ništa za instaliranje, i uključuje potpuno funkcionalan web-bazirani editor za razvoj, upravljanje bazama podataka, kao i implementaciju.
Možete ga zamisliti kao Android Studio, koji je kompletnije okruženje od običnog frejmvorka. Neke od prednosti Web2py-a su:
- Praktično nema krivulje učenja.
- Minimalno jezgro (samo 12 objekata), koje se čak može zapamtiti!
- Čist Pajton templejt.
- Zaštita od XSS, CSRF i drugih napada.
- Intuitivan i dosledan API.
Da li je Web2py pravi izbor za vas?
Web2py je stabilan i zabavan frejmvork, ali ga je teško preporučiti u odnosu na druge opcije poput Džanga, Flaska itd. Skoro da nema posla, a priča o unit testiranju nije sjajna. Ipak, možda ćete uživati u njegovom API-ju i celokupnom iskustvu koje nudi, posebno ako razvijate REST API-je.
CherryPy
CherryPy je još jedan mikrofrejmvork koji teži da pruži osnovnu funkcionalnost frejmvorka i brzo se skloni sa puta.
Iako je uporediv sa drugim mikrofrejmvorkovima kao što je Flask, CherryPy se ističe po nekoliko karakteristika:
- Uključuje ugrađeni server sa više niti (što je još uvek na listi želja za Flask).
- (Jedan) web server može da hostuje više aplikacija!
- Svoju aplikaciju možete da pokrenete kao WSGI aplikaciju (za povezivanje sa drugim WSGI aplikacijama) ili kao običan HTTP server (što bolje funkcioniše).
- Odlična podrška za profiliranje i unit testiranje.
- Radi na PyPy-u (za prave zavisnike od performansi), Jython-u, pa čak i na Android-u.
CherryPy radi sve ovo, kao i standardne funkcionalnosti koje očekujete od web frejmvorka.
Da li je CherryPy pravi izbor za vas?
Ako uglavnom kreirate RESTful servise, CherryPy je ozbiljnija opcija od Flaska. To je frejmvork koji je razvijan deceniju i pogodan je za male i velike aplikacije.
Sanic
Uspon Node-a i njegovog asinhronog modela programiranja naveo je mnoge zajednice, uključujući i Pajton, da se osete izostavljeno. Kao odgovor, pojavila se navala asinhronih web frejmvorka, sa Sanic kao jednim od njih.
Sanic je u velikoj meri inspirisan Flaskom, do te mere da je preuzeo dekoratore ruta, nacrte i druge osnovne elemente. I ne stide se to da priznaju. Ono što Sanic donosi, ako ste ljubitelj Flaska, jeste pravi non-blocking I/O kako bi se dostigli nivoi performansi Node aplikacija. Drugim rečima, Sanic je Flask sa async/await podrškom!
U poređenju sa CherryPy-jem, Sanic ima značajnu prednost u performansama (samo zamislite kako bi prošao protiv Flaska!). Pogledajte sledeće rezultate testiranja koje je sproveo DataWeave:
Kao što vidite, kada broj istovremenih zahteva pređe 50 u sekundi, CherryPy se praktično guši i stvara visok procenat neuspešnih zahteva.
Da li je Sanic pravi izbor za vas?
Iako su performanse Sanic-a izvanredne, možda nije najbolji izbor za vaš sledeći projekat. Glavni razlog je nedostatak asinhronih biblioteka. Većina postojećih Pajton alata i biblioteka je napisana za jednothread verziju CPython-a, bez razmatranja visokog nivoa konkurentnosti ili asinhronih operacija. Ako, na primer, vaš omiljeni ORM ne podržava asinhrono izvršavanje, cela poenta korišćenja Sanic-a gubi smisao.
Zbog ovih razloga zrelosti i dostupnosti, nećemo dalje istraživati asinhronizovane frejmvorke u Pajtonu.
Masonite
Pre izvesnog vremena sam naišao na ovaj frejmvork i pomislio da je to korak u pravom smeru. Od tada je objavljena verzija 2.0 i osećam da je konačno vreme da se Masonite malo promoviše.
Jednostavno rečeno, Masonite je Pajton verzija Laravel-a (poznatog PHP frejmvorka, u slučaju da niste znali). Zašto je to važno? Važno je zato što je Laravel izgrađen na principima Ruby on Rails, i zajedno, ova dva frejmvorka omogućavaju programerima koji nisu Ruby da iskuse „Rails način“ obavljanja stvari.
Laravel (i donekle, Rails) programeri će se osećati kao kod kuće i brzo će se adaptirati. Kada sam testirao Masonite (i prijavio jedan ili dva problema, uključujući i grešku!), uspeo sam da kreiram REST API-je bez razmišljanja, jer je moja Laravel mišićna memorija radila sve.
Kao kompletan frejmvork sa „batteries included“ pristupom, Masonite nudi nekoliko zanimljivih stvari:
- ORM u stilu active record.
- Migracije baza podataka (koje, za razliku od Džanga, programer mora da kreira).
- Moćan IoC kontejner za injekciju zavisnosti.
- Sopstveni CLI (komandni interfejs) za zadatke postavljanja i pokretanja.
- Izvrsna podrška za unit testiranje.
Najveći „rival“ za Masonite je Džango, jer zajednica daje sve od sebe da promoviše frejmvork kao jednostavan, divan i „sledeću veliku stvar“. Da li će prevazići Džango, vreme će pokazati (ako mene pitate, ima dobre šanse), ali za diskusiju o poređenju ova dva, pogledajte ovde i ovde.
Da li je Masonite pravi izbor za vas?
Masonite je još uvek relativno nov u poređenju sa Džangom, tako da se ne može preporučiti kao zamena za Džango. Međutim, ako vam se sviđa Rails (ili Laravel) način rada, cenili biste ono što Masonite može da ponudi. Idealan je za brzo kreiranje prototipova kojima su sve potrebne funkcije unapred konfigurisane i lako se mogu menjati.
Zaključak
Postoji veliki broj Pajton frejmvorka, i velikih i malih. Iako možete koristiti gotovo bilo koji za mali projekat, aplikacije za preduzeća imaju zahteve koje mnogi od ovih frejmvorka ne mogu ispuniti. Ako mene pitate, za razvoj za preduzeća, Džango (u određenoj meri), Zope i TurboGears su najbolji izbor. A od njih, lično bih izabrao TurboGears.
Međutim, svaki arhitekta koji drži do sebe može koristiti mikrofrejmvork i razviti sopstvenu arhitekturu. I to se često dešava u praksi, što objašnjava uspeh Flaska i sličnih rešenja.
Ako ste početnik, onda bi vam ovaj online kurs mogao biti od pomoći u učenju Pajtona.
Zatim istražite neke od specijalizovanih Pajton frejmvorka za razvoj API-ja.