Tutorial #5: Flaskûntwerppatroanen en bêste praktiken foar webapplikaasjes
Tutorial #6: Flask API Tutorial mei foarbyld
Dizze ynliedende Python Flask-tutorial ferklearret wat Flask is, ynstallaasje fan Python, Virtualenv, Flask Hello World foarbyld mei in seksje oer koadefoarbylden, debuggen en testen:
Websteeûntwikkeling is mear in keunst as in feardigens. It freget geduld en warberens, tegearre mei trochsettingsfermogen, moed en tawijing om te meitsjen wat nedich is foar it in echt súkses. Dizze dagen is it essinsjeel foar learlingen om sa gau mooglik op snelheid te kommen.
Wy hawwe dizze Python Flask-tutorial makke foar de learlingen om op 'e hichte te kommen en ienfâldige as komplekse webprogrammearring te ymplementearjen mei Python 3 .
Dit Python Flask tutorial is mear as in flask beginner tutorial, dat sil dekke de ynstallaasje fan Python, Virtualenv, en oare essensjele pakketten. Yn dizze searje tutorials sille wy Flask ek ynstallearje tegearre mei de oare nedige Flask-plugins. Wy hawwe ek in seksje opnommen oer koade-debuggen, testen en trochgeande yntegraasje mei Git Actions.
List Of Tutorials In This Flask Series
Tutorial #1: Python Flask Tutorial - Yntroduksje ta Flask foar begjinners
Tutorial #2: Flask Template, Form, View, And Redirect With Examples
Tutorial #3: Flask Database Handling - Hoe te brûken Flask mei in databank
Tutorial # 4: Flask App En Flask Project Layout Mei Blueprint & amp;neamde stappen yn de betingsten.
Stap 1: Python ynstallearje
Kontrolearje oft jo Python 3 ynstallearre hawwe of net. Sa net, download Python 3 dan hjirwei en ynstallearje it neffens jo bestjoeringssysteem.
Stap 2: Meitsje in Python Virtual Environment
Meitsje in firtuele omjouwing mei de below kommando.
python3 -m venv venv
Brûk it ûndersteande kommando om de Python firtuele omjouwing te aktivearjen.
source venv/bin/activate
Wy hawwe hjirûnder in foarbyld jûn fan aktivearring en deaktivearring fan de firtuele omjouwing.
Alle folgjende kommando's yn dizze tutorial moatte rinne yn in aktivearre firtuele omjouwing. Ynstallearje it tsjil pakket sadat wy kinne bouwe tsjillen binnen de firtuele omjouwing.
pip install wheel
Stap 3: Flask Download And Insall
Wy moatte de Flask download stappen útfiere en ynstallearje Flask mei help fan de hjirûnder neamde stappen.
No ynstallearje Flask.
pip install flask
Guon fan ús wurkje graach tegearre mei de lêste feroarings yn boarnekoade. Wy kinne it hjirûnder opjûne kommando brûke om te ynstallearjen mei de lêste feroarings oan 'e boarnen fan Flask.
Meitsje in tydlike triemtafel.
mkdir tmp
No ynstallearje Flask fanút de Github repository. Jo moatte ferbûn bliuwe mei it ynternet foar it ûndersteande kommando om te wurkjen.
pip3 install -e [email protected]:pallets/flask.git#egg=flask
Sjoch nei de konsole-útgongen om de suksesfolle ynstallaasje te kontrolearjen. Kontrolearje no oft wy tagong krije ta Flask-kommando's.
flask --help
Jo sjogge miskien wat útsûnderings oer it ûntbrekken fan in Flaskoanfraach. Negearje dy lykwols, om't wy gjin Flask-app hawwe makke. Us app is in eksimplaar fan Flask, dat is in wrapper op it Werkzeug web framework en Jinja sjabloanmotor.
Werkzeug
Werkzeug is in WSGI toolkit. WSGI is allinich in opropkonvinsje foar webservers om weboanfragen troch te stjoeren nei webapplikaasjes skreaun yn Python-programmearring.
Jinja
Sjabloan is in essensjele feardichheden fan webûntwikkelders. Jinja is in folslein funksjonele en populêre sjabloanmotor foar Python. It is nochal in ekspressive taal en biedt in robúste set ark foar sjabloanskriuwers.
Stap 4: Ynstallearje MongoDB
Folgje de hjirûnder neamde stappen om MongoDB te ynstallearjen. Wy hawwe de stappen sketst om it te ynstallearjen yn in Debian basearre Linux. As jo in oar bestjoeringssysteem brûke, gean dan nei de keppeling en ynstallearje neffens it bedoelde bestjoeringssysteem.
Ynstallearje gnupg foar it ymportearjen fan MongoDB iepenbiere GPG-kaai.
sudo apt-get install gnupg
Ymportearje no de kaai mei it kommando hjirûnder.
wget -qO - //www.mongodb.org/static/pgp/server-4.2.asc | sudo apt-key add -
Meitsje de boarnenlistbestân neffens jo Linux-distribúsje. Wy hawwe de list mei boarnen tafoege lykas per Debian.
echo "deb //repo.mongodb.org/apt/debian buster/mongodb-org/4.2 main" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.2.list
Opdracht update útfiere
sudo apt-get update
Ynstallearje no MongoDB mei it ûndersteande kommando.
sudo apt-get install -y mongodb-org
As de ynstallaasje suksesfol is, start MongoDB mei it ûndersteande kommando.
sudo systemctl start mongod
Kontrolearje de status fan MongoDB, mei it kommandohjirûnder.
sudo systemctl status mongod
Soargje no dat mongod automatysk begjint by it herstarten fan it systeem troch it hjirûnder werjûn kommando út te jaan.
sudo systemctl enable mongod
Kontrolearje no as jo kinne ferbine mei de MongoDB-tsjinner mei mongo-kliïnt.
mongo
Probearje yn 'e mongo-shell de help te brûken en lit dbs-kommando's sjen.
Meitsje in Flask-app
Brûk it kommando hjirûnder om flask-appbuilder en mongoengine te ynstallearjen.
pip install flask-appbuilder pip install mongoengine pip install flask_mongoengine
Meitsje in skeleton-app mei de wearden werjûn as opmerkingen yn it ûndersteande koadefragment.
flask fab create-app # Give the following values in the command line questionnaire # Application Name: flaskTutorialApp # EngineType : MongoEngine
Wy sille de útfier sjen lykas de hjirûnder jûn.
Your new app name: exampleApp Your engine type, SQLAlchemy or MongoEngine (SQLAlchemy, MongoEngine) [SQLAlchemy]: MongoEngine Downloaded the skeleton app, good coding!
Besjoch de yndieling fan it projekt en de app. Wy hawwe de útfier fan it beamkommando hjirûnder sjen litten.
Litte wy it Flask-konfiguraasjetriem sjen. It is in standert konfiguraasje generearre as it resultaat fan it lêste kommando. Unkommentearje Cyborg -tema, lykas hjirûnder werjûn.
# Theme configuration for Cybord=g # these themes are located on static/appbuilder/css/themes # We can create our own and easily use them by placing them on the same dir structure to override #APP_THEME = "bootstrap-theme.css" # default bootstrap #APP_THEME = "cerulean.css" # cerulean #APP_THEME = "amelia.css" # amelia theme #APP_THEME = "cosmo.css" # cosmo theme APP_THEME = "cyborg.css" # cyborg theme #APP_THEME = "flatly.css" # flatly theme
Om de skeleton-app út te fieren, brûk it hjirûnder opjûne kommando op 'e terminal.
flask run
Flask Hello World
Om jo earste programma yn 'e flaskTutorialApp te meitsjen, iepenje de triem views.py ûnder de app-map en foegje de folgjende koade ta. Sjoch foar ymportearjen útspraken jûn yn it bestân. Foegje dizze útspraken ta as net al oanwêzich.
from flask_appbuilder import BaseView, expose from app import appbuilder class HelloWorld(BaseView): """ This first view of the tutorial """ route_base = "/hello" @expose("/") def hello(self): return "Hello, World! from Software Testing Help" # at the end of the file appbuilder.add_view_no_menu(HelloWorld())
Bewarje it bestân nei it tafoegjen fan boppesteande boarnekoade. Gean nei de root-map fan it projekt en brûk it ûndersteande kommando om de ûntwikkelingstsjinner fan de Flask út te fieren.
flask run
Neagje no nei //localhost:5000/hello/ om de útfier yn te sjende browser.
Debuggen
Op it stuit draait de ûntwikkelingstsjinner net yn de Debug-modus. Sûnder debuggen modus is it dreech om de flaters te finen yn 'e boarnekoade fan' e Flask Application.
Debug Mode yn Flask resultearret yn it folgjende:
- Debug-modus aktivearret Automatyske reloader. It betsjut dat wy de ûntwikkelingstsjinner net opnij hoege te begjinnen nei't wy wizigingen yn 'e boarnekoade fan 'e applikaasje makke hawwe.
- Debug-modus aktivearret de Python-debugger. Wy kinne de wearden fan fariabelen ynspektearje tidens de útsûndering.
- Debug-modus makket Flask-applikaasje-debuggen mooglik. Wy kinne de wearden fan ferskate fariabelen kontrolearje yn sesjes foar debuggen.
Stopje de ûntwikkelingstsjinner as it al rint. Jo kinne CTRL + C of Keyboard interrupt brûke om itselde te dwaan.
Brûk de folgjende koade om de debug-modus yn te skeakeljen en de ûntwikkelingstsjinner tydlik út te fieren.
FLASK_ENV=development flask run
Sykje de konsole foar Debugger PIN en meitsje der in notysje fan.
Litte wy no de boppesteande skreaune HelloWorld-werjefte feroarje mei de folgjende rigels fan it koadefragment. Merk op dat wy in oanpaste útsûndering yntrodusearre hawwe.
@expose("/") def hello(self): raise Exception("A custom exception to learn DEBUG Mode") return "Hello, World! from Software Testing Help"
Gean nei //localhost:5000/hello/, en jo sille sjen dat de applikaasje in útsûndering opwekt. De browser toant de stack trace, lykas hjirûnder werjûn.
![](/wp-content/uploads/guides/iae5sr2a76-3.png)
Sjoch fierders nei de konsole wêr't de ûntwikkelingstsjinner rint. Jo sille fine dat dizze kear, dewizigingen yn 'e views.py wurde automatysk ûntdutsen, en de debug-tsjinner begjint fan himsels. No hoege wy it net mei de hân opnij starte.
De konsole sil rigels hawwe, lykas hjirûnder werjûn. Wy moatte de Debug-PIN foar letter notearje.
* Detected change in '/work/sth/flaskTutorialApp/app/views.py', reloading 2020-06-02 14:59:49,354:INFO:werkzeug: * Detected change in '/work/sth/flaskTutorialApp/app/views.py', reloading * Restarting with stat 2020-06-02 14:59:49,592:INFO:werkzeug: * Restarting with stat * Debugger is active! * Debugger PIN: 150-849-897
Kontrolearje no de stapelspoar yn 'e browser en gean nei de lêste rigel. Klikje derop om syn werjefte út te wreidzjen en klikje op it CLI-ikoan om de shell yn ynteraktive modus te iepenjen.
![](/wp-content/uploads/guides/iae5sr2a76-4.png)
As jo it iepenje, sille jo sjen dat de browser in prompt foar Debug PIN sil sjen litte. Jou de debug-PIN en klikje op OK.
![](/wp-content/uploads/guides/iae5sr2a76-5.png)
As wy fierder gean nei it jaan fan de Debug-PIN, kinne wy tagong krije ta de ynteraktive shell.
Wy krije tagong ta de shell fanút de browser en kin de wearden fan fariabelen ynspektearje om de oarsaak fan 'e útsûndering te finen en de flater op in bettere manier te behanneljen. Sjoch asjebleaft nei ien fan de foarbylden werjûn yn de ôfbylding hjirûnder.
![](/wp-content/uploads/guides/iae5sr2a76-6.png)
Feroarje no de koade yn view.py, lykas hjirûnder werjûn. Tink derom dat wy kommentaar hawwe oer de line dy't de ferhege útsûndering hie.
@expose("/") def hello(self): # raise Exception("A custom exception to learn DEBUG Mode") return "Hello, World! from Software Testing Help"
De Flask-applikaasje testen
No litte wy ús earste test skriuwe foar de Flask-applikaasje dy't wy ûntwikkelje. Ynstallearje earst de PyTest. PyTest is in testkader. It helpt ús om bettere koade te skriuwen.
Boppedat, krekt om't wy ienheidstests kinne skriuwe by it ûntwikkeljen fan ús applikaasjes, is it mooglik om de TDD-oanpak te folgjen. TDD stiet foar Test-Driven Development. Yn ús folgjende tutorials fandizze searje sille wy altyd earst tests skriuwe en ús werjeften as modellen ûntwikkelje.
Ynstallearje PyTest
pip install pytest
Nu meitsje in map mei de namme tests binnen de app-map en yn dat meitsje in triem neamd test_hello.py. Litte wy ús earste ienheidstest skriuwe om ús werjefte te testen.
Kopiearje it folgjende koadefragment en plak it yn test_hello.py.
#!/usr/bin/env python from app import appbuilder import pytest @pytest.fixture def client(): """ A pytest fixture for test client """ appbuilder.app.config["TESTING"] = True with appbuilder.app.test_client() as client: yield client def test_hello(client): """ A test method to test view hello """ resp = client.get("/hello", follow_redirects=True) assert 200 == resp.status_code
Brûk it ûndersteande pytest-kommando om út te fieren de tests. PyTest sammelet automatysk de Tests en toant de resultaten op de standert útfier.
![](/wp-content/uploads/guides/iae5sr2a76-7.png)
Meitsje in GitHub Workflow
Wy brûke Git Actions om in CI/CD workflow te meitsjen foar ús foarbyldapplikaasje. Folgje de hjirûnder neamde stappen foar jo projekt.
Stap 1: Navigearje nei de repository side op GitHub. Klik op Git Actions.
![](/wp-content/uploads/guides/iae5sr2a76-8.png)
Stap 2: Rôlje nei ûnderen op 'e side en fyn in besteande workflow-sjabloan foar in Python-pakket.
![](/wp-content/uploads/guides/iae5sr2a76-9.png)
Stap 3: Set it Python-pakket Workflow yn.
![](/wp-content/uploads/guides/iae5sr2a76-10.png)
Stap 4: Sadree't de python-package.yml workflow-konfiguraasje iepenet, fernije it op basis fan de opjûne yaml ekstra tagwearden.
name: flaskTutorialApp jobs: build: runs-on: ubuntu-latest strategy: matrix: python-version: [3.7, 3.8] mongodb-version: [4.2] steps: - name: Start MongoDB uses: supercharge/[email protected] with: mongodb-version: ${{ matrix.mongodb-version }} # other values
Wy wolle ús Flask-applikaasje testen op de lêste Ubuntu Linux-distribúsje. Neist it OS wolle wy ús tests allinich útfiere mei Python 3.7 en Python 3.8.
Stap 5: Commit the python-package.yml mei de bywurke wearden.
![](/wp-content/uploads/guides/iae5sr2a76-11.png)
Stap 6: De commit op 'e foarige side bringt ús nei de GitActionsjobs.
![](/wp-content/uploads/guides/iae5sr2a76-12.png)
Stap 7: [Opsjoneel]
Op de Github Jobs-side foar de foarbyld-tutorial-app kinne wy in badge meitsje en pleatse it op it README.md-bestân foar it werjaan fan de buildstatus.
No, as de wizigingen ynset binne foar de mastertûke, sil Git Workflow, lykas skreaun yn python-package.yml wurde folge en rinne op Git Actions .
Konklúzje
Yn dizze tutorial hawwe wy alle basisbegripen behannele fan betingsten oant it ynstellen fan CI / CD-workflow foar in webapplikaasje ûntwikkele mei Flask - In Python-basearre webûntwikkelingskader.
Dizze tutorial beslacht alle nedige stappen lykas it ynstallearjen fan Python, it downloaden fan & Flask ynstallearje, wurkje mei Flask-Appbuilder, testen mei PyTest, ensfh. om te begjinnen mei webûntwikkeling mei Python. De webûntwikkelingsmienskip fergeliket Flask gewoanlik mei in oar populêr Python-webûntwikkelingskader neamd Django.
Wy sille dizze ferskillen ferklearje en sille dizze kaders ek fergelykje yn ien fan 'e tutorials yn dizze searje.