A Flask és a Django Python-alapú webfejlesztési keretrendszerek. Ez a bemutató részletesen összehasonlítja a Django vs Flask-t. A Flask vs Node-ot is röviden tárgyalja:
Mindig is átható dilemma volt, amikor arról volt szó, hogy milyen keretrendszert válasszon a következő projektjéhez. Néhány havonta új technológiát és egy olyan keretrendszert lát, amely kiküszöböli az előző, általa használt keretrendszer gyengeségét.
A keretrendszer inkább egy csendes kultúra, és egy sor konvenció, amelyet követnie kell, hogy relevánsabb és produktívabb legyen ebben a folyamatosan változó technológiai világban. Összehasonlításképpen a webfejlesztés sokkal gyorsabban halad, mint az asztali fejlesztés.
Django Vs Flask
Ebben a bemutatóban részletesen felvázoljuk a Django és a Flask összehasonlítását. A Flask és a Django Python-alapú webfejlesztési keretrendszerek. Sokan a könnyű mikrokeretrendszerek felé mozdulnak el. Ezek a keretrendszerek agilisak, rugalmasak, kicsik, és segítenek a mikroszolgáltatások és szerver nélküli alkalmazások fejlesztésében.
Tekintettel a NodeJS népszerűségére, a Flask vs. Node szekcióban a Flask vs. Node között egy csodagyerek összehasonlítást is készítettünk. A Django és a Flask értékelése az alábbi jellemzők alapján segít az egyiket a másik fölé helyezni.
Alapértelmezett admin
Mindkét keretrendszer biztosít egy bootstrapped admin alkalmazást. A Django esetében ez beépített és alapértelmezett telepítéssel jár. A Flask esetében azonban telepíteni kell a Flask-Appbuildert ahhoz, hogy admin felületet kapjunk.
Közben ne felejtsen el létrehozni egy szuperfelhasználót a Django és egy admin felhasználót a Flask esetében, hogy a böngésző segítségével be tudjon jelentkezni az admin backendbe.
Adatbázisok és ORMS
A Django alapértelmezett beépített ORM-mel van szállítva, amely egyenesen támogatja az olyan RDBMS-ekkel való interakciót, mint az Oracle, MySQL, PostgreSQL, SQLite, stb. Ez az ORM támogatja a migrációk létrehozását és kezelését is. Viszonylag kényelmesebb a beépített validációkkal rendelkező adatbázis-modellek létrehozása.
A Flask szintén nem erőltet egyetlen konkrét módszert sem, és a Django esetében vázoltakhoz hasonló funkciókat támogató különböző bővítményekkel együtt használható. A Flask-SQLAlchemy, Flask-Migrate, Flask-MongoEngine, Flask-SQLAlchemy példákat a sorozat egyik tutorialjában már bemutattuk.
Nézetek és útvonalak
Mindkét keretrendszer rendelkezik mechanizmusokkal a metódus alapú és osztály alapú nézetek deklarálására. A Django esetében az útvonalakat és a nézeteket külön fájlokban említjük. Emellett mindig explicit módon kell átadnunk a kérés objektumát.
Másrészt a Flaskban egy dekorátor segítségével megemlíthetjük az útvonalakat a megfelelő kezelők számára. A Flaskban a request objektum globális, és csak rendelkezésre áll mindenféle explicit átadás nélkül. A views és az útvonalak használatának fogalmait részletesen bemutattuk az egyik oktatóanyagunkban.
Nyomtatványok és sablonok
A Django Forms beépült a keretrendszerbe, és nem igényel telepítést. Az űrlapok meglehetősen fontosak az alkalmazásokban, és a Django-ban az űrlapok átadhatók a sabloncímkéknek, és a sablonokban megjeleníthetők. A Flask esetében azonban Flask-WTF-et kell használnunk.
A Flask-Appbuildert is felhasználtuk az űrlapok létrehozásához. Ezenkívül a WTF-Alembic használható HTML űrlapok generálására adatbázis-modellek alapján.
Mindkét keretrendszer támogatja a Jinja2 templatingot, és mindkettő támogatja a statikus fájlok kiszolgálását beépített funkciókkal az erőforrások URL-jének generálására, és ez manapság elég gyakori minta minden keretrendszerben.
Bár a változók átadásának és a sablonok megjelenítésének különböző módjai vannak a saját nézeti módszereikben, mindkét keretrendszer ugyanazzal a szintaxissal rendelkezik a változók sablonokban való eléréséhez.
Rugalmasság
A Django a puszta mérete és összetettsége miatt kevésbé rugalmas, mint a Flask. A Flask könnyen bővíthető az általa támogatott rengeteg kiterjesztés segítségével. Ezért a Flask beállítása több időt és energiát igényel, mert több kiterjesztést kell kiértékelnünk.
A fejlesztőknek adott szabadság bizonyos értelemben lassabb fejlesztést és szállítást eredményez. Másrészt a Django egy sor már kialakult konvenciót követ, és olyan archetípusokat követ, amelyek kevesebb eltérést igényelnek a projekt céljaitól és célkitűzéseitől.
Tanulási görbe
Majdnem ugyanannyi időt igényel a Django és a Flask megtanulása. A Flask kisebb API-val rendelkezik, ezért az emberek talán gyorsabban végeznek vele, ami az alapvető keretrendszert illeti. Ugyanilyen kihívássá válik, amikor a bővítmények használatáról van szó. Hamarosan nehézkessé válhat.
Azonban éppen azért, mert nincs minden egy csomagba csomagolva, a Flask keretrendszer esetében könnyebb gyakorolni a gondok elkülönítését.
Javasoljuk, hogy a mintákat tanulja meg, és ne a követett szintaxist. Mind a Django, mind a Flask kiváló dokumentációval rendelkezik. Könnyen követheti azt egy funkció fejlesztése közben.
A projekt mérete és időtartama
Ha nagyobb projektben dolgozol, nagyobb csapatokkal, akkor jobb, ha kihasználod a Django érettségét és a széleskörű támogatói támogatást. Ha a projekted kisebb és kevesebb fejlesztőt igényel, akkor jobb, ha a Flaskot választod.
Továbbá, ha a projekted hosszú távra szól, akkor a Django a megfelelő választás, ellenkező esetben választhatod a Flask-ot.
Alkalmazás típusa
Korábban a Django számított a megfelelő választásnak, amikor teljes értékű vállalati szintű webes alkalmazásokra volt szükség. De ma már a Flask is hasonlóan érett, és ugyanilyen körülmények között is jól használható.
A fejlesztők azonban inkább a Flask-ot választják kisebb vagy statikus weboldalak fejlesztéséhez, vagy a RESTful API webes szolgáltatások gyors megvalósítása során.
Fejlesztői toborzás
Az Ön által használt keretrendszer konvenciójában képzett erőforrásokkal rendelkezni kifizetődő. Gyorsabb fejlesztésre, gyorsabb tesztelésre, gyorsabb szállításra és gyorsabb hibajavításra számíthat.
A Flask esetében elég könnyű új fejlesztőket találni. A Django esetében azonban kihívás képzett erőforrásokat találni. Nem sokan állnak készen arra, hogy Django fejlesztőket alkalmazzanak. Ráadásul a Django keretrendszer elég régi, és ezért a legtöbb új alkalmazottat drága felvenni, ha összehasonlítjuk a Flask keretrendszerben jártasakkal.
Az új műszaki diplomások is felveszik a könnyű keretrendszereket, mint például a Flask, mert az iparági trendek a szétválasztott mikroszolgáltatásokkal rendelkező alkalmazások létrehozása vagy a szervermentes megvalósítás létrehozását támogató technológia felé mutatnak. A Javascriptet széles körben használják a könnyebben használható és népszerűbb keretrendszerekkel együtt.
Nyílt forráskód
Mind a Flask, mind a Django nyílt forráskódú projektek. A Django a //github.com/django/django/django, a Flask pedig a //github.com/pallets/flask címen érhető el. Ha megnézzük ezeket a projekteket, a Django esetében a közreműködők száma meglehetősen nagyobb, mint a Flask esetében.
Ezért több és gyorsabb támogatásra számíthatunk, ha problémáink és kérdéseink vannak, amelyek megoldásra várnak. A tipikus feltételezésekkel ellentétben a Flask projekt felhasználóinak száma magasabb, mint a Djangoé.
A Flask egyik aggasztó ténye, hogy nem biztos, hogy egy adott feladatra van stabil bővítmény. Ezért a legjobb kiszűrésének munkája a bővítmény felhasználójára marad.
Például, a Flask-Twitter-oembeddert használtuk a Twitter API-val való együttműködéshez a legutóbbi bemutatóban, de ennek a bővítménynek volt néhány problémája, ami miatt Flask-Cache-ről Flask-Caching-re kellett váltanunk.
Még egy egyéni telepítési utasítást is be kellett illesztenünk, hogy a Flask-twitter-oembeddert a frissített Github repónkból telepítsük, ahelyett, hogy a projekt requrements.txt fájljában említettük volna.
A gyakori karbantartás tipikus kihívás, amellyel egy nyílt forráskódú projekt esetében szembesülni fogsz. A nyílt forráskódú projekt támogatása és kezelése általában fizetős szolgáltatásokhoz kötött. Előfordulhat, hogy hosszú ideig kell várnod arra, hogy a projektben közreműködők kijavítsanak néhány problémát.
Teljesítmény
A Flask keretrendszer könnyebb, mint a Django, és elhanyagolható különbségekkel jobban teljesít, különösen az I/O műveleteket figyelembe véve.
Nézze meg az alábbi összehasonlításokat. A kérések számának növekedésével a Flask teljesítménye szinte változatlan marad. A Django azonban több időt vesz igénybe a sablonok renderelése az adatok ORM segítségével történő lekérdezése után.
Python Flask Vs Django: Egy táblázatos összehasonlítás
# | Jellemzők | Django | Flakon |
---|---|---|---|
1 | Alapértelmezett admin | Beépített Admin Backend | Flask-Appbuilder telepítése |
2 | Alapértelmezett adminisztrátor engedélyezése | A settings.py fájlban győződjön meg róla, hogy az admin telepített alkalmazást nem jegyzi be. ... # Application definition TELEPÍTETT_ALKALMAZÁSOK = [ 'weboldal', 'django.contrib.admin', # other code ] ... | Importáljuk az AppBuildert és az SQLA-t a flask_appbuilderből, először a DB-t, majd az Appbuildert inicializáljuk. from flask import Flask from flask_appbuilder import AppBuilder, SQLA app=Flask(__name__) db = SQLA(app)appbuilder=AppBuilder(app, db.session) |
3 | Admin felhasználó létrehozása | python manage.py createsuperuser | flask fab create-admin |
4 | Adatbázisok és ORMS | Beépített ORM az RDBMS számára Django-nonrel használata NoSQL backendekhez | Flask-SQLAlchemy telepítése Egy NoSQL-specifikus Flask-kiterjesztés, például Flask-MongoEngine |
5 | Nézetek és útvonalak | URLConf az urls.py fájlban from django.urls import path from .import views urlpatterns = [ path('/path', views.handler_method), # egyéb urlok és kezelők ] | Használja a @app.route("/path") dekorátort a Views-on, hogy egy útvonalat egy függvénnyel képezzen le. @app.route("/path") def handler_method(): # egyéb kód további logikával |
6 | Renderelő sablonok | Nézettségben from django.shortcuts import render def example_view(request): tempvar="value_for_template" return render( kérés, 'demo.html', {'tempvar':tempvar} ) | Nézettségben from . import app from flask import request from flask import render_template @app.route("/path") def demo(): tempvar="value_for_template" return render_template( "demo.html", temp_var=temp_var ) |
7 | Változó interpoláció sablonokban | A templates/demo.html fájlban {{ tempvar }} | A templates/demo.html fájlban {{ tempvar }} |
8 | Rugalmasság | Kevésbé rugalmas | Rugalmasabb |
9 | Tervezési döntések | Kevesebb tervezési döntés a fejlesztőkkel. | Nagyobb szabadság a fejlesztőknek. |
10 | Projekt eltérés | Kevesebb eltérés a projekt céljaitól. | Több eltérés a fejlesztőknek adott szabadság miatt. |
11 | A kódbázis mérete | Nagyobb kódbázis | Kisebb kódbázis |
12 | API-k száma | További API-k | Kevesebb API |
13 | Alkalmazás típusa | Teljes értékű webes alkalmazások | Kisebb alkalmazások / mikroszolgáltatások |
14 | RESTful alkalmazások | Django REST keretrendszer RESTful alkalmazásokhoz. | A RESTful alkalmazásokhoz használja a következő bővítményeket. Flask-RESTful Flask-RESTX Kapcsolódás |
15 | Teljesítmény | Lassú teljesítmény, ha a kérések száma nagy. | Végig egyenletes teljesítmény. |
16 | Nyílt forráskódú hozzájárulások | Több Forks, Watches és Commits. | Kevesebb Fork, Watch és Commit. |
17 | Fejlesztők | Tapasztalt fejlesztőket igényel, és nem könnyű őket felvenni. | A legtöbb fejlesztő kevésbé tapasztalt, és megfelelő számban található. |
Flask Vs Node
A webfejlesztés stackjével kapcsolatban kiderül, hogy a webes fejlesztés különböző technológiák ötvözését igényli. Egy webes alkalmazást frontendre és backendre kell bontanunk. Az alkalmazás frontend részét a legjobb a böngészőben futó technológiák, például a JavaScript, a HTML és a CSS segítségével fejleszteni.
Általában a háttértárat olyan nyelveken fejlesztik, amelyek alkalmasak a szerveroldalra, és szükség esetén kölcsönhatásba léphetnek a mögöttes operációs rendszerrel, a csatlakoztatott adatbázisokkal vagy a hálózattal.
A NodeJS nevű JavaScript-alapú keretrendszer azonban megváltoztatta a fenti nézetet, és lehetővé tette a fejlesztők számára, hogy a webes alkalmazások frontend és backend fejlesztése során konzisztenciát és egységességet teremtsenek. A fejlesztők a backendhez JavaScript segítségével fejleszthettek.
Ebben a Flask vs. Node részben a Python programozási nyelven alapuló Flask keretrendszert hasonlítjuk össze a Chrome JavaScript futtatási idején alapuló Node-dal különböző kritériumok alapján, mint például architektúra, sebesség, közösségi támogatás stb.
# | Kritériumok | Flakon | Node |
---|---|---|---|
1 | Nyelvi futásidő | Python | A Chrome V8 JavaScript motorja |
2 | Építészet | A nem blokkoló I/O nem blokkoló webszerverek, például a gunicorn használatát igényli. Microframework(back end) kategória. | Alapvetően nem blokkoló I/O-t biztosít. Fullstack kategória |
3 | Csomagkezelő | pip | npm |
4 | Sebesség | Lassabb a külön Python-értelmező miatt. | Gyorsabb a Just-In-Time fordító miatt. |
5 | Nyílt forrás | Igen | Igen |
6 | Közösségi támogatás | A Githubon 2.3 K órák 51,4 K Csillagok 13.7 K Villák | A Githubon 2.9 K Órák 71,9 K Csillagok 17,6 K Villák |
7 | Hibakeresés | Könnyebb hibakeresés Python debuggerrel függőségek nélkül. | Több erőfeszítést igényel. Könnyebb egy Bluebird / Promise Library-vel rendelkező fejlesztői IDE-vel. |
8 | Karbantartás | Alacsony karbantartási igény | Magasabb karbantartás |
9 | Valós idejű alkalmazások | Természeténél fogva nem alkalmas. A socket.io-val együtt azonban működhet valós idejű felhasználási esetekben. Használja a Flask-socketio bővítményt. | Alkalmas az eseményvezérelt architektúra és a streaming modulok miatt. Alapvetően aszinkron. |
10 | Könyvtárak | Érettebb és stabilabb. | Kevésbé érett és stabil, de aktív fejlesztés és javítások kiadása. |
11 | Kódminőség | Kizárólag a back end számára készült. | Ez néha veszélybe kerül, mert az új frontend-fejlesztők átváltanak a backendre. |
12 | Fejlesztői csapat összetétele | A csapatok általában Back end fejlesztőkből és front end fejlesztőkből állnak. A gondok elkülönülnek. | A fejlesztők szerepet cserélhetnek, és mind a front end, mind a back end területén dolgozhatnak. |
13 | Integráció a meglévő rendszerrel és alkalmazásokkal | Könnyebben integrálható más meglévő backend-alkalmazásokkal a Python ökoszisztéma segítségével a gépi tanulás és a nagyméretű adatok alkalmazásaihoz. | Meglehetősen új, és egyéni vagy új könyvtárak létrehozását igényli a más meglévő alkalmazásokkal való integrációhoz. |
Gyakran ismételt kérdések
K #1) Mit tanuljak meg először, Django vagy Flask?
Válasz: Először jobb, ha a Flaskkal kezdesz. Ha már szereztél egy kis tapasztalatot a webfejlesztésben, akkor jöhet a Django. A Django feltételezi, hogy már tudod, hogyan működnek a webes alkalmazások, és a legtöbb funkciót magától elintézi.
K #2) A Flask vagy a Django jobb?
Válasz: Mind a Flask, mind a Django kiváló és megfelel a céljának. A Django-t kiemelkedőbb vállalati szintű alkalmazások készítésére használják. A Flask-ot statikus és kisebb alkalmazások készítésére használják. A Flask prototípusok készítésére is alkalmas. A Flask bővítmények használatával azonban nagyméretű alkalmazásokat is készíthetünk.
K #3) Milyen vállalatok használják a Flask-ot?
Válasz: A Flaskot használó cégek közül néhány a Reddit, a Mailgun, a Netflix, az Airbnb stb.
Q #4) Milyen oldalak használják a Djangót?
Válasz: A Django-t használó oldalak közül néhány: Instagram, Spotify, YouTube, Dropbox, Bitbucket, Eventbrite stb.
Következtetés
Nem igazán szabad sokáig ragaszkodnunk egy keretrendszerhez. Készen kell állnunk arra, hogy új technológiai készleteket tanuljunk meg, és elfogadjuk a trendben lévő stackeket. Néhányan közülünk viszonylag out of the box, akkumulátoros megközelítéseket akarnak, merev kiadási ciklusokkal, szigorúbb visszafelé kompatibilitás fenntartásával stb.
Ha úgy gondolod, hogy inkább ebbe a csoportba tartozol, akkor a Django-t kell választanod. Azonban hihetetlenül jó együtt járni a Flask keretrendszer új funkcióival és rugalmasságával is. Ha konzisztenciát szeretnél fenntartani a frontend és a backend között, akkor választhatsz egy full-stack keretrendszert, például a NodeJS-t.
Egy keretrendszer mellett dönteni inkább egy választás, ami a kontextustól és a megoldandó problémáktól függ. Egy keretrendszer kiválasztása mindig nehéz. Reméljük, hogy ebben a bemutatóban bemutattuk a lényeges felülvizsgálati pontokat, és ez segít az egyik keretrendszer véglegesítésében. Azonban javasoljuk, hogy mindkét keretrendszert megtanuljuk.
Könnyebb a Flaskkal kezdeni, majd a Django felé haladni, miután némi tapasztalatot szereztél a webfejlesztésben. Ha a fejlesztési erőfeszítéseidhez valamilyen oknál fogva szükséged van a JavaScript használatára, akkor a NodeJS-t használhatod.