Lernilo n-ro 5: Flask-Dezajno-Ŝablonoj Kaj Plej Bonaj Praktikoj Por TTT-aplikoj
Lernilo n-ro 6: Flask API-Instruilo Kun Ekzemplo
Ĉi tiu enkonduka lernilo pri Python Flask klarigas kio estas Flask, instalo de Python, Virtualenv, Flask Hello World ekzemplo kun sekcio pri kodekzemploj, senararigado kaj testado:
Reteja disvolviĝo estas pli ol arto ol lerteco. Ĝi postulas paciencon kaj diligenton, kune kun persistemo, kuraĝo kaj dediĉo por krei kio estas necesa por ke ĝi estu vera sukceso. Nuntempe, estas esenca por lernantoj rapidegi kiel eble plej baldaŭ.
Ni kreis ĉi tiun lernilon pri Python Flask por ke la studentoj rapidu kaj efektivigu simplan kaj kompleksan retprogramadon uzante Python 3. .
Ĉi tiu lernilo pri Python Flask pli similas al lernilo por komencantoj de flasko, kiu kovros la instalado de Python, Virtualenv, kaj aliaj esencaj pakoj. En ĉi tiu serio de lerniloj, ni ankaŭ instalos Flask kune kun la aliaj necesaj Flask-kromaĵoj. Ni ankaŭ inkluzivis sekcion pri kodo-sencimigado, testado kaj kontinua integriĝo per Git-Agoj.
Listo de Lerniiloj En Ĉi tiu Flasko-Serio
Lernejo n-ro 1: Python Flask Lernilo – Enkonduko al Flasko por Komencantoj
Lernilo n-ro 2: Flasko-Ŝablono, Formo, Vido kaj Alidirektilo kun Ekzemploj
Lernilo n-ro 3: Flask Database Handling – Kiel Uzi Flask Kun Datumaro
Lernilo n-ro 4: Flask Apo Kaj Flask Projekto Aranĝo Kun Blueprint &menciitaj paŝoj en la antaŭkondiĉoj.
Paŝo 1: Instali Python
Kontrolu ĉu vi instalis Python 3 aŭ ne. Se ne, tiam elŝutu Python 3 de ĉi tie kaj instalu ĝin laŭ via Operaciumo.
Paŝo 2: Kreu Python Virtual Environment
Kreu virtualan medion uzante la sub komando.
python3 -m venv venv
Uzu la malsupran komandon por aktivigi la virtualan medion Python.
source venv/bin/activate
Ni donis ekzemplon de aktivigo kaj malaktivigo de la virtuala medio sube.
Ĉiuj postaj komandoj en ĉi tiu lernilo devus ruliĝi en aktivigita virtuala medio. Instalu la radpakaĵon por ke ni povu konstrui radojn ene de la virtuala medio.
pip install wheel
Paŝo 3: Flask Elŝuto Kaj Ensall
Ni devas plenumi la Flask-elŝutajn paŝojn kaj instalu Flask per la sube menciitaj paŝoj.
Nun instalu Flask.
pip install flask
Kelkaj el ni ŝatas labori kune kun la plej novaj fontkodaj ŝanĝoj. Ni povas uzi la ĉi-sube donitan komandon por instali kun la plej novaj ŝanĝoj al la fontoj de Flask.
Faru provizoran dosierujon.
mkdir tmp
Nun instalu Flask el la deponejo Github. Vi devas resti konektita al la interreto por ke la suba komando funkciu.
pip3 install -e [email protected]:pallets/flask.git#egg=flask
Rigardu la konzolajn elirojn por kontroli la sukcesan instaladon. Nun kontrolu ĉu ni povas aliri Flask-komandojn.
flask --help
Vi eble vidos kelkajn esceptojn pri la foresto de Flask.aplikaĵo. Tamen, neglektu tiujn ĉar ni ne kreis ajnan Flask-aplikaĵon. Nia aplikaĵo estas ekzemplo de Flask, kiu estas envolvaĵo en la retkadro Werkzeug kaj ŝablona motoro Jinja.
Werkzeug
Werkzeug estas ilaro de WSGI. WSGI estas nur alvoka konvencio por retserviloj por plusendi retpetojn al ret-aplikoj skribitaj en Python programlingvo.
Jinja
Ŝablono estas esencaj kapabloj de retaj programistoj. Jinja estas plene prezentita kaj populara ŝablona motoro por Python. Ĝi estas sufiĉe esprimplena lingvo kaj provizas fortikan aron da iloj al ŝablonaŭtoroj.
Paŝo 4: Instalu MongoDB
Sekvu la sube menciitajn paŝojn por instali MongoDB. Ni skizis la paŝojn por instali ĝin en Debian bazita Linukso. Se vi uzas alian operaciumon, tiam aliru la ligilon kaj instalu laŭ la celita operaciumo.
Instalu gnupg por importi publikan GPG-ŝlosilon de MongoDB.
sudo apt-get install gnupg
Nun importu la ŝlosilon per la ĉi-suba komando.
wget -qO - //www.mongodb.org/static/pgp/server-4.2.asc | sudo apt-key add -
Kreu la fontlistdosieron laŭ via Linuksa distribuo. Ni aldonis la liston de fontoj laŭ 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
Ruli ĝisdatigan komandon
sudo apt-get update
Nun instalu MongoDB, uzante la suban komandon.
sudo apt-get install -y mongodb-org
Kiam la instalado estas sukcesa, lanĉu MongoDB per la suba komando.
sudo systemctl start mongod
Kontrolu la staton de MongoDB, uzante la komandon.malsupre.
sudo systemctl status mongod
Nun certigu, ke mongod aŭtomate komenciĝas ĉe la rekomenco de la sistemo eldonante la sube montritan komandon.
sudo systemctl enable mongod
Nun kontrolu ĉu vi povas konektiĝi al la MongoDB-servilo per mongo-kliento.
mongo
En la mongoŝelo, provu uzi la helpon kaj montri dbs-komandojn.
Krei Flask-Apon
Uzu la ĉi-suban komandon por instali flask-appbuilder kaj mongoengine.
pip install flask-appbuilder pip install mongoengine pip install flask_mongoengine
Kreu skeletan aplikaĵon kun la valoroj montritaj kiel komentoj en la suba koda fragmento.
flask fab create-app # Give the following values in the command line questionnaire # Application Name: flaskTutorialApp # EngineType : MongoEngine.
Ni vidos la eligon similan al tiu ĉi sube donita.
Your new app name: exampleApp Your engine type, SQLAlchemy or MongoEngine (SQLAlchemy, MongoEngine) [SQLAlchemy]: MongoEngine Downloaded the skeleton app, good coding!
Rigardu la aranĝon de la projekto kaj la apo. Ni montris la eliron de la arba komando sube.
Ni rigardu la agordosieron de Flask. Ĝi estas defaŭlta agordo generita kiel rezulto de la lasta komando. Malkomentu Cyborg -temon, kiel montrite sube.
# 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
Por ruli la skeletan apon, uzu la ĉi-sube donitan komandon en la terminalo.
flask run
Flask Hello World
Por krei vian unuan programon en la flaskTutorialApp, malfermu dosieron views.py sub la apo-dosierujo kaj aldonu la sekvan kodon. Serĉu import-deklarojn donitajn en la dosiero. Aldonu ĉi tiujn deklarojn se ne jam ĉeestas.
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())
Konservu la dosieron post aldoni la ĉi-supran fontkodon. Iru al la radika dosierujo de la projekto kaj uzu la suban komandon por ruli la disvolvan servilon de Flask.
flask run
Nun navigu al //localhost:5000/hello/ por vidi la eliron enla retumilo.
Sencimigado
Nuntempe, la evoluservilo ne funkcias en la Sencimiga reĝimo. Sen sencimiga reĝimo, estas malfacile trovi la erarojn en la fontkodo de la Flask-Apliko.
Sencimiga reĝimo en Flask rezultas jene:
- Sencimiga reĝimo aktivigas Aŭtomatan reŝargilon. Ĝi signifas, ke ni ne bezonas rekomenci la disvolvan servilon post kiam ni faras ŝanĝojn en la fontkodo de la aplikaĵo.
- Sencimiga reĝimo aktivigas la Python-sencimigilon. Ni povas inspekti la valorojn de variabloj dum la Escepto.
- Sencimiga reĝimo ebligas elpurigon de Flask-apliko. Ni povas kontroli la valorojn de diversaj variabloj en sencimigaj sesioj.
Haltu la evoluservilon se ĝi jam funkcias. Vi povas uzi CTRL + C aŭ Klavarinterrompon por fari la samon.
Uzu la sekvan kodon por ebligi la sencimigan reĝimon kaj ruli la evoluservilon provizore.
FLASK_ENV=development flask run
Serĉi la konzolo por Sencimiga PIN kaj notu ĝin.
Nun ni ŝanĝu la supre skribitan HelloWorld-vidon per la sekvaj linioj de la kodpeceto. Rimarku, ke ni enkondukis kutiman escepton.
@expose("/") def hello(self): raise Exception("A custom exception to learn DEBUG Mode") return "Hello, World! from Software Testing Help"
Navigu al //localhost:5000/hello/, kaj vi vidos, ke la aplikaĵo levis escepton. La retumilo montras la stakspuron, kiel montrite sube.
![](/wp-content/uploads/guides/iae5sr2a76-3.png)
Krome, rigardu la konzolon kie funkcias la evoluservilo. Vi trovos, ke ĉi-foje, laŝanĝoj en la views.py estas aŭtomate detektitaj, kaj la sencimiga servilo rekomenciĝas per si mem. Nun ni ne bezonas permane rekomenci ĝin.
La konzolo havos liniojn, kiel montrite sube. Ni devas noti la Sencimigan PIN por poste.
* 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
Nun kontrolu la stakspuron en la retumilo kaj iru al la lasta linio. Alklaku ĝin por vastigi ĝian vidon kaj alklaku la CLI-ikonon por malfermi la ŝelon en interaga reĝimo.
![](/wp-content/uploads/guides/iae5sr2a76-4.png)
Post kiam vi malfermos ĝin, Vi vidos, ke la retumilo montros prompton por Sencimiga PIN. Donu la Sencimigan PIN kaj alklaku OK.
![](/wp-content/uploads/guides/iae5sr2a76-5.png)
Kiam ni antaŭeniras post doni la Sencimigan PIN, ni povas aliri la interagan ŝelon.
Ni aliras la ŝelon de ene de la retumilo kaj povas inspekti la valorojn de variabloj por trovi la kaŭzon de la Escepto kaj trakti la eraron en pli bona maniero. Bonvolu rigardi unu el la ekzemploj montritaj en la suba bildo.
![](/wp-content/uploads/guides/iae5sr2a76-6.png)
Nun ŝanĝu la kodon en view.py, kiel montrite sube. Notu, ke ni komentis la linion, kiu havis la levitan Escepton.
@expose("/") def hello(self): # raise Exception("A custom exception to learn DEBUG Mode") return "Hello, World! from Software Testing Help"
Testado de la Flask-Apliko
Nun ni skribu nian unuan teston por la aplikaĵo Flask, kiun ni disvolvas. Unue, instalu la PyTest. PyTest estas testa kadro. Ĝi helpas nin skribi pli bonan kodon.
Cetere, nur ĉar ni povas skribi unutestojn dum disvolvado de niaj aplikaĵoj, eblas sekvi la TDD-aliron. TDD signifas Test-Driven Development. En niaj postaj lerniloj deĉi tiu serio, ni ĉiam skribos testojn unue kaj disvolvos niajn vidpunktojn aŭ modelojn.
Instali PyTest
pip install pytest
Nun kreu dosierujon nomatan testoj ene de la aplikaĵa dosierujo kaj en tiu kreu dosieron nomatan test_hello.py. Ni skribu nian unuan unuteston por testi nian vidpunkton.
Kopiu la sekvan kodpeceton kaj algluu ĝin en 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
Uzu la suban pytest-komandon por ruli la provoj. PyTest aŭtomate kolektas la Testojn kaj montras la rezultojn sur la norma eligo.
![](/wp-content/uploads/guides/iae5sr2a76-7.png)
Krei GitHub-Laborfluon
Ni uzas Git-Agojn por krei CI/KD-laborfluon por nia ekzempla aplikaĵo. Sekvu la sube menciitajn paŝojn por via projekto.
Paŝo 1: Iru al la deponeja paĝo en GitHub. Alklaku Git-Agojn.
![](/wp-content/uploads/guides/iae5sr2a76-8.png)
Paŝo 2: Rulumu malsupren sur la paĝo kaj trovu ekzistantan laborfluan ŝablonon por Python-pakaĵo.
![](/wp-content/uploads/guides/iae5sr2a76-9.png)
Paŝo 3: Agordu la Python-pakaĵon Workflow.
![](/wp-content/uploads/guides/iae5sr2a76-10.png)
Paŝo 4: Post kiam la python-package.yml laborflua agordo malfermiĝas, ĝisdatigu ĝin surbaze de la donita yaml aldona etikedvaloroj.
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
Ni volas testi nian Flask-aplikaĵon ĉe la plej nova Ubuntu-Linuksa distribuo. Krom la OS, ni volas ruli niajn testojn nur uzante Python 3.7 kaj Python 3.8.
Paŝo 5: Faru la python-package.yml kun la ĝisdatigitaj valoroj.
![](/wp-content/uploads/guides/iae5sr2a76-11.png)
Paŝo 6: La kommit en la antaŭa paĝo kondukas nin al la GitActionslaborpostenoj.
![](/wp-content/uploads/guides/iae5sr2a76-12.png)
Paŝo 7: [Laŭvola]
En la paĝo Github Jobs por la ekzempla lernila programo, ni povas krei insignon kaj meti ĝin en la dosiero README.md por montri la konstruan staton.
Nun, kiam ajn la ŝanĝoj estas faritaj al la majstra branĉo, Git Workflow, kiel skribite en python-package.yml estos sekvita kaj rulita per Git Actions. .
Konkludo
En ĉi tiu lernilo, ni kovris ĉiujn bazajn konceptojn de antaŭkondiĉoj ĝis agordo de CI/KD-laborfluo por TTT-aplikaĵo evoluigita per Flask – A Python-bazita reto-disvolva kadro.
Ĉi tiu lernilo kovras ĉiujn necesajn paŝojn kiel instali Python, elŝuti & instali Flask, labori kun Flask-Appbuilder, provi kun PyTest, ktp por komenci kun TTT-disvolviĝo uzante Python. La retejo-disvolva komunumo kutime komparas Flask kun alia populara Python-reto-disvolva kadro nomita Django.
Ni klarigos ĉi tiujn diferencojn kaj ankaŭ komparos ĉi tiujn kadrojn en unu el la lerniloj en ĉi tiu serio.