Flask in Django sta ogrodji za spletni razvoj, ki temeljita na Pythonu. V tem učbeniku je podrobno predstavljena primerjava med Djangom in Flaskom. Na kratko je obravnavano tudi razmerje med Flaskom in Node:
Pri vprašanju o izbiri ogrodja za vaš naslednji projekt je to že od nekdaj dilema. Vsakih nekaj mesecev se pojavi nova tehnologija in ogrodje, ki odpravi slabost prejšnjega, ki ste ga uporabljali.
Okvir je bolj kot tiha kultura in niz konvencij, ki jih morate upoštevati, če želite biti pomembnejši in produktivnejši v tem nenehno spreminjajočem se svetu tehnologije. V primerjavi z razvojem namiznih računalnikov se spletni razvoj premika veliko hitreje.
Django Vs Flask
V tem učbeniku podrobno primerjamo Django in Flask. Flask in Django sta ogrodji za spletni razvoj, ki temeljita na Pythonu. Mnogi se usmerjajo v lahka mikrookvirja. Ta ogrodja so agilna, prilagodljiva, majhna ter pomagajo pri razvoju mikrostoritev in aplikacij brez strežnika.
Glede na priljubljenost NodeJS smo v razdelku Flask vs. Node pripravili tudi primerjavo med Flaskom in Node. Ocenjevanje Djanga in Flaska na podlagi naslednjih značilnosti vam bo pomagalo pri izbiri enega od njiju.
Privzeto Admin
Obe ogrodji zagotavljata zagonsko upraviteljsko aplikacijo. V ogrodju Django je vgrajena in je priložena privzeti namestitvi. V ogrodju Flask pa morate namestiti program Flask-Appbuilder, če želite imeti upraviteljski vmesnik.
Medtem ne pozabite ustvariti superuporabnika v Djangu in administratorja v primeru Flaska, da se boste lahko z brskalnikom prijavili v upraviteljski zaledni sistem.
Podatkovne zbirke in ORMS
Django ima privzeto vgrajen ORM, ki podpira interakcijo z RDBMS, kot so Oracle, MySQL, PostgreSQL, SQLite itd. Ta ORM podpira tudi ustvarjanje in upravljanje migracij. Ustvarjanje modelov podatkovnih zbirk z vgrajenimi validacijami je razmeroma udobnejše.
Flask prav tako ne vsiljuje nobene posebne metode in je na voljo za uporabo z različnimi razširitvami, ki podpirajo podobne funkcije, kot je opisano v primeru Djanga. V enem od vodičev iz serije smo navedli primere Flask-SQLAlchemy, Flask-Migrate, Flask-MongoEngine.
Pogledi in poti
Obe ogrodji imata mehanizme za deklariranje pogledov, ki temeljijo na metodah in razredih. V primeru Django so poti in pogledi omenjeni v ločenih datotekah. Prav tako moramo vedno eksplicitno posredovati objekt zahteve.
Po drugi strani pa lahko v Flasku uporabimo dekorator, da omenimo poti za ustrezne izvajalce. Objekt zahteve v Flasku je globalen in je preprosto na voljo brez izrecnega posredovanja. Koncept uporabe pogledov in poti smo podrobno opisali v enem od naših učnih gradiv.
Obrazci in predloge
Obrazci Django Forms so vgrajeni v ogrodje in jih ni treba namestiti. Obrazci so precej pomembni za aplikacije, v Djangu pa jih je mogoče posredovati oznakam predlog in so na voljo za prikazovanje v predlogah. V primeru Flask pa moramo uporabiti Flask-WTF.
Za ustvarjanje obrazcev smo uporabili tudi program Flask-Appbuilder. Poleg tega lahko program WTF-Alembic uporabite za ustvarjanje obrazcev HTML na podlagi modelov podatkovne zbirke.
Obe ogrodji podpirata predloge Jinja2 in obe podpirata strežbo statičnih datotek z vgrajenimi funkcijami za ustvarjanje naslovov URL virov, kar je danes precej pogost vzorec v vseh ogrodjih.
Čeprav obstajajo različni načini za posredovanje spremenljivk in prikazovanje predlog v posameznih metodah pogleda, imata obe ogrodji enako sintakso za dostop do spremenljivk v predlogah.
Prilagodljivost
Django je zaradi svoje velikosti in zapletenosti manj prilagodljiv kot Flask. Flask je mogoče preprosto razširiti s pomočjo velikega števila razširitev, ki jih podpira. Zato je za vzpostavitev Flaska potrebno več časa in truda, saj moramo oceniti več razširitev.
Svoboda, ki je dana razvijalcem, na nek način vodi v počasnejši razvoj in dostavo. Po drugi strani Django sledi nizu že uveljavljenih konvencij in arhetipov, ki zahtevajo manj odstopanj od ciljev in nalog projekta.
Krivulja učenja
Za učenje Djanga in Flaska je potreben skoraj enak čas. Flask ima manjši vmesnik API, zato ga lahko ljudje hitreje dokončajo, kar zadeva osnovno ogrodje. Enako zahteven postane, ko je treba uporabljati njegove razširitve. Kmalu lahko postane okoren.
Ker pa vse ni zapakirano v enem paketu, je v primeru ogrodja Flask lažje prakticirati ločevanje skrbi.
Priporočamo, da se naučite vzorcev in ne sintakse, ki ji sledite. Tako Django kot Flask imata odlično dokumentacijo. Z lahkoto jo lahko spremljate med razvijanjem funkcije.
Velikost in trajanje projekta
Če delate na večjem projektu z večjimi ekipami, je bolje izkoristiti zrelost Djanga in obsežno podporo sodelavcev. Če je vaš projekt manjši in zahteva manjše število razvijalcev, je bolje izbrati Flask.
Poleg tega je Django prava izbira, če bo vaš projekt trajal dolgo, sicer pa lahko izberete Flask.
Vrsta uporabe
Prej je veljalo, da je Django prava izbira, ko je bilo treba izdelati celovite spletne aplikacije za podjetja. Danes pa je Flask prav tako zrel in lahko dobro služi v enakih pogojih.
Razvijalci se za Flask odločajo bolj pri razvoju majhnih ali statičnih spletnih mest ali pri izvajanju hitrih spletnih storitev RESTful API.
Zaposlovanje razvijalcev
Usposobljeni viri v konvenciji ogrodja, ki ga uporabljate, se izplačajo. Pričakujete lahko hitrejši razvoj, hitrejše testiranje, hitrejšo dostavo in hitrejše odpravljanje težav.
Pri ogrodju Flask je precej enostavno najti nove razvijalce. Pri ogrodju Django pa je težko najti usposobljene vire. Razvijalcev za ogrodje Django ni veliko pripravljenih za zaposlitev. Poleg tega je ogrodje Django precej staro, zato je zaposlitev večine novih delavcev draga v primerjavi s tistimi, ki so usposobljeni za ogrodje Flask.
Novi diplomanti tehničnih smeri se lotevajo tudi lahkih ogrodij, kot je Flask, saj so trendi v industriji usmerjeni v ustvarjanje aplikacij z ločenimi mikrostoritvami ali tehnologijo, ki podpira ustvarjanje izvajanja brez strežnika. Javascript se pogosto uporablja skupaj z ogrodji, ki jih je lažje uporabljati in so bolj priljubljena.
Odprta koda
Flask in Django sta odprtokodna projekta. Django najdete na naslovu //github.com/django/django, Flask pa na naslovu //github.com/pallets/flask. Če pogledamo ta projekta, je število sodelujočih pri Djangu precej večje kot pri Flasku.
Zato lahko pričakujemo več in hitrejšo podporo, če imamo težave in poizvedbe, ki jih je treba rešiti. V nasprotju z običajnimi predpostavkami je število uporabnikov projekta Flask večje od števila uporabnikov projekta Django.
Pri Flasku je zaskrbljujoče dejstvo, da za določeno nalogo morda ne obstaja stabilna razširitev, zato mora uporabnik razširitve izbrati najboljšo.
Na primer, v zadnjem učbeniku smo za delo s Twitterjevim API-jem uporabili Flask-Twitter-oembedder, vendar je imela ta razširitev nekaj težav, zaradi katerih smo morali preiti s Flask-Cache na Flask-Caching.
Vključiti smo morali celo izjavo o namestitvi po meri, da smo Flask-twitter-oembedder namestili iz naše posodobljene repozitorija Github, namesto da bi ga omenili v naši datoteki requrements.txt projekta.
Pogosto vzdrževanje je tipičen izziv, s katerim se boste soočili pri odprtokodnem projektu. Podpora in upravljanje odprtokodnega projekta sta običajno vezana na plačljive storitve. Morda boste morali dolgo čakati, da bodo avtorji projekta odpravili nekaj težav.
Uspešnost
Okvir Flask je lažji od Djanga in deluje bolje z zanemarljivimi razlikami, zlasti ob upoštevanju operacij I/O.
Oglejte si spodnje primerjave. Ob povečanju števila zahtevkov je zmogljivost Flaska skoraj enaka. Vendar pa Django potrebuje več časa za prikazovanje predlog po pridobivanju podatkov z uporabo ORM.
Python Flask Vs Django: tabelarična primerjava
# | Značilnosti | Django | Flaška |
---|---|---|---|
1 | Privzeto Admin | Vgrajeni Admin Backend | Namestitev Flask-Appbuilder |
2 | Omogoči privzetega skrbnika | V nastavitvah settings.py se prepričajte, da ste odkomentirali aplikacijo, ki jo je namestil upravitelj. ... # Definicija aplikacije INSTALLED_APPS = [ "spletna stran", 'django.contrib.admin', # druga koda ] ... | Uvozite AppBuilder in SQLA iz flask_appbuilder, najprej inicializirajte DB in nato Appbuilder iz flask uvoz Flask iz flask_appbuilder uvoz AppBuilder, SQLA app=Flask(__name__) db = SQLA(app)appbuilder=AppBuilder(app, db.session) |
3 | Ustvarjanje uporabnika upravitelja | python manage.py createsuperuser | flask fab create-admin |
4 | Podatkovne zbirke in ORMS | Vgrajeni ORM za RDBMS Uporaba Django-nonrel za zaledne strežnike NoSQL | Namestitev Flask-SQLAlchemy Razširitev Flask, specifična za NoSQL, kot je Flask-MongoEngine |
5 | Pogledi in poti | URLConf v urls.py iz django.urls uvoz poti iz .import views urlvzorci = [ path('/path', views.handler_method), # drugi urni naslovi in upravljavci ] | Uporabite okrasnik @app.route("/path") v Pogledih za preslikavo poti s funkcijo. @app.route("/path") def handler_method(): # druga koda z nadaljnjo logiko |
6 | Predloge za upodabljanje | V pogledih iz django.shortcuts uvozi render def example_view(zahteva): tempvar="value_for_template" vrniti render( zahtevo, 'demo.html', {'tempvar':tempvar} ) | V pogledih iz . uvozite app from flask uvoz zahtevka from flask uvozi render_template @app.route("/path") def demo(): tempvar="value_for_template" vrniti render_template( "demo.html", temp_var=temp_var ) |
7 | Interpolacija spremenljivk v predlogah | V predlogah/demo.html {{ tempvar }} | V predlogah/demo.html {{ tempvar }} |
8 | Prilagodljivost | Manj prilagodljiv | Prilagodljivejši |
9 | Odločitve o oblikovanju | Manj odločitev o oblikovanju z razvijalci. | Več svobode za razvijalce. |
10 | Odstopanje projekta | Manj odstopanj od ciljev projekta. | Več odstopanj zaradi svobode, ki jo imajo razvijalci. |
11 | Velikost baze kode | Večja zbirka kode | Manjša zbirka kode |
12 | Število API-jev | Več API-jev | Manj API-jev |
13 | Vrsta uporabe | Polnopravne spletne aplikacije | Manjše aplikacije / mikrostoritve |
14 | Aplikacije RESTful | Okvir Django REST za aplikacije RESTful. | Za aplikacije RESTful uporabite naslednje razširitve. Flask-RESTful Flask-RESTX Povezava |
15 | Uspešnost | Počasno delovanje, kadar je število zahtevkov veliko. | Dosledno delovanje ves čas. |
16 | Prispevki v odprto kodo | Večje število vilic, opazovanj in priredb. | Manjše število vilic, opazovanj in potrditev. |
17 | Razvijalci | Zahteva izkušene razvijalce, ki jih ni mogoče zlahka zaposliti. | Večina razvijalcev je manj izkušenih in jih je dovolj. |
Flask Vs Node
V zvezi s skladom za razvoj spletnih aplikacij se je izkazalo, da razvoj za splet zahteva združitev različnih tehnologij. Spletno aplikacijo moramo razdeliti na frontend in backend. Frontend del aplikacije je najbolje razviti s tehnologijami, ki se izvajajo v brskalniku, kot so JavaScript, HTML in CSS.
Na splošno je zaledje razvito v jezikih, ki so primerni za strežniško stran in lahko po potrebi komunicirajo z osnovnim operacijskim sistemom, povezanimi zbirkami podatkov ali omrežjem.
Vendar pa je ogrodje NodeJS, ki temelji na JavaScriptu, spremenilo zgornji pogled in razvijalcem omogočilo doslednost in enotnost pri razvoju sprednjega in zadnjega dela spletnih aplikacij. Razvijalci so lahko zadnji del razvijali z uporabo JavaScripta.
V tem razdelku Flask proti Node primerjamo Flask, ki temelji na programskem jeziku Python, in Node, ki temelji na Chromeovem pogonskem okolju JavaScript, po različnih merilih, kot so arhitektura, hitrost, podpora skupnosti itd.
# | Merila | Flaška | Vozlišče |
---|---|---|---|
1 | Zagonski jezik | Python | Pogon V8 za JavaScript v brskalniku Chrome |
2 | Arhitektura | Neblokirni I/O zahteva uporabo spletnih strežnikov brez blokiranja, kot je gunicorn. Kategorija mikro ogrodja (zaledni del). | Inherentno zagotavlja neblokirni vhod/izhod. Kategorija Fullstack |
3 | Upravitelj paketov | pip | npm |
4 | Hitrost | Počasnejši zaradi ločenega prevajalnika Pythona. | Hitrejši zaradi prevajalnika Just-In-Time. |
5 | Odprta koda | Da | Da |
6 | Podpora Skupnosti | Na Githubu 2.3 Ure K 51,4 K Zvezdice 13,7 K Forks | Na Githubu 2,9 K ure 71,9 K Zvezdice 17,6 K Forks |
7 | Odstranjevanje napak | Lažje razhroščevanje z razhroščevalnikom Python brez odvisnosti. | Zahteva več truda. Lažje z razvojnim IDE s knjižnico Bluebird / Promise. |
8 | Vzdrževanje | Majhna poraba sredstev za vzdrževanje | Višje vzdrževanje |
9 | Aplikacije v realnem času | Vendar lahko deluje skupaj s socket.io za primere uporabe v realnem času. Uporabite razširitev Flask-socketio. | Primeren zaradi arhitekture, ki temelji na dogodkih, in modulov za pretakanje. Naravno asinhroni. |
10 | Knjižnice | Bolj zrel in stabilen. | Manj zrel in stabilen, vendar z aktivnim razvojem in izdajami popravkov. |
11 | Kakovost kode | Ustvarjen je izključno za zadnji del. | Včasih je ogrožena, ker novi razvijalci sprednjega dela preidejo na zadnji del. |
12 | Sestava ekipe razvijalcev | Ekipe so običajno sestavljene iz razvijalcev zalednega in sprednjega dela. Skrb za varnost je ločena. | Razvijalci si lahko izmenjujejo vloge in delajo tako za sprednji kot za zadnji del. |
13 | Integracija z obstoječim sistemom in aplikacijami | Lažja integracija z drugimi obstoječimi starejšimi zalednimi aplikacijami z uporabo ekosistema Python za strojno učenje in aplikacije za velike podatke. | Precej novost, ki zahteva izdelavo lastnih ali novih knjižnic za integracijo z drugimi obstoječimi aplikacijami. |
Pogosto zastavljena vprašanja
V #1) Kaj naj se najprej naučim, Django ali Flask?
Odgovor: Bolje je, da se najprej odločite za Flask. Ko pridobite nekaj izkušenj z razvojem spletnih aplikacij, se lahko lotite Djanga. Django predvideva, da že veste, kako delujejo spletne aplikacije, in sam poskrbi za večino funkcionalnosti.
V #2) Ali je boljši Flask ali Django?
Odgovor: Tako Flask kot Django sta odlična in primerna za svoj namen. Django se uporablja za ustvarjanje pomembnejših aplikacij za podjetja, Flask pa za ustvarjanje statičnih in manjših aplikacij. Flask je primeren tudi za izdelavo prototipov. Z uporabo razširitev Flask pa lahko ustvarimo tudi velike aplikacije.
V #3) Katera podjetja uporabljajo Flask?
Odgovor: Nekatera podjetja, ki uporabljajo Flask, so Reddit, Mailgun, Netflix, Airbnb itd.
V #4) Katera spletna mesta uporabljajo Django?
Odgovor: Nekatera spletna mesta, ki uporabljajo Django, so Instagram, Spotify, YouTube, Dropbox, Bitbucket, Eventbrite itd.
Zaključek
V resnici se ne bi smeli za dolgo časa fiksirati z enim ogrodjem. Pripravljeni bi morali biti na učenje novih tehnoloških sklopov in sprejemanje trendovskih nizov. Nekateri od nas želijo primerljivo iz škatle, z baterijo vključene pristope s togimi cikli izdajanja, ohranjanje tesnejše povratne združljivosti itd.
Če menite, da spadate bolj v to skupino, potem morate izbrati Django. Vendar pa je neverjetno, da se lahko sprehodite tudi po novih funkcijah in prilagodljivosti ogrodja Flask. Kadar želite ohraniti skladnost med sprednjim in zadnjim delom, lahko izberete ogrodje polnega sklada, kot je NodeJS.
Izbira ogrodja je bolj izbira, ki je odvisna od konteksta in težav, ki jih poskušamo rešiti. Izbira ogrodja je vedno težka. Upamo, da smo v tem učbeniku predstavili bistvene točke pregleda in da vam bodo pomagale pri dokončni izbiri enega ogrodja. Vendar priporočamo, da se naučite obeh ogrodij.
Lažje je začeti s Flaskom in nato, ko si pridobite nekaj izkušenj na področju spletnega razvoja, preiti na Django. Če iz kakšnega razloga vaša razvojna prizadevanja zahtevajo uporabo JavaScripta, lahko nadaljujete z NodeJS.