Tutoriaal #5: Flesontwerppatrone en beste praktyke vir webtoepassings
Tutoriaal #6: Fles API-tutoriaal met voorbeeld
Hierdie inleidende Python Flask-tutoriaal verduidelik wat Flask is, installering van Python, Virtualenv, Flask Hello World-voorbeeld met 'n afdeling oor kodevoorbeelde, ontfouting en toetsing:
Webwerfontwikkeling is meer van 'n kuns as 'n vaardigheid. Dit verg geduld en ywer, tesame met deursettingsvermoë, moed en toewyding om te skep wat nodig is sodat dit 'n ware sukses kan wees. Deesdae is dit noodsaaklik vir leerders om so gou as moontlik by spoed te kom.
Ons het hierdie Python Flask-tutoriaal geskep vir die studente om op hoogte te kom en eenvoudige sowel as komplekse webprogrammering te implementeer deur Python 3 te gebruik .
Hierdie Python-fles-tutoriaal is meer soos 'n fles-beginner-tutoriaal, wat die installering van Python, Virtualenv en ander noodsaaklike pakkette. In hierdie reeks tutoriale sal ons ook Flask saam met die ander nodige Flask-inproppe installeer. Ons het ook 'n afdeling ingesluit oor kodeontfouting, toetsing en deurlopende integrasie deur gebruik te maak van Git Actions.
Lys van tutoriale in hierdie flesreeks
Tutoriaal #1: Python-fles Tutoriaal – Inleiding tot fles vir beginners
Tutoriaal #2: Flessjabloon, vorm, aansig en herlei met voorbeelde
Tutoriaal #3: Hantering van flesdatabasis – Hoe om fles met 'n databasis te gebruik
Tutoriaal #4: Flestoepassing en flesprojekuitleg met bloudruk &genoemde stappe in die voorvereistes.
Stap 1: Installeer Python
Kyk of jy Python 3 geïnstalleer het of nie. Indien nie, laai Python 3 dan van hier af en installeer dit volgens jou bedryfstelsel.
Stap 2: Skep 'n Python-virtuele omgewing
Skep 'n virtuele omgewing met behulp van die onder opdrag.
python3 -m venv venv
Gebruik die onderstaande opdrag om die Python virtuele omgewing te aktiveer.
source venv/bin/activate
Ons het 'n voorbeeld van aktivering en deaktivering van die virtuele omgewing hieronder gegee.
Al die daaropvolgende opdragte in hierdie tutoriaal moet in 'n geaktiveerde virtuele omgewing loop. Installeer die wielpakket sodat ons wiele binne die virtuele omgewing kan bou.
pip install wheel
Stap 3: Flask Download And Insall
Ons moet die Flask aflaai stappe uitvoer en installeer Flask deur die onderstaande stappe te gebruik.
Installeer nou Flask.
pip install flask
Sommige van ons hou daarvan om saam te werk met die nuutste bronkode veranderinge. Ons kan die onderstaande opdrag gebruik om te installeer met die nuutste veranderinge aan die bronne van Flask.
Maak 'n tydelike gids.
mkdir tmp
Installeer nou Flask vanaf die Github-bewaarplek. Jy moet aan die internet gekoppel bly vir die onderstaande opdrag om te werk.
pip3 install -e [email protected]:pallets/flask.git#egg=flask
Kyk na die konsole-uitsette om die suksesvolle installasie na te gaan. Kyk nou of ons toegang tot fles-opdragte het.
flask --help
Jy sal dalk 'n paar uitsonderings sien oor die afwesigheid van 'n fles.aansoek. Verwaarloos dit egter, want ons het geen Flask-toepassing geskep nie. Ons toepassing is 'n voorbeeld van Flask, wat 'n omhulsel op die Werkzeug-webraamwerk en Jinja-sjabloonenjin is.
Werkzeug
Werkzeug is 'n WSGI-nutsdingstel. WSGI is slegs 'n oproepkonvensie vir webbedieners om webversoeke aan te stuur na webtoepassings wat in Python-programmeertaal geskryf is.
Jinja
Sjabloon is 'n noodsaaklike vaardighede van webontwikkelaars. Jinja is 'n volledige en gewilde sjabloonenjin vir Python. Dit is nogal 'n ekspressiewe taal en bied 'n robuuste stel gereedskap aan sjabloonskrywers.
Stap 4: Installeer MongoDB
Volg die onderstaande stappe om MongoDB te installeer. Ons het die stappe uiteengesit om dit in 'n Debian-gebaseerde Linux te installeer. As jy 'n ander bedryfstelsel gebruik, kry dan toegang tot die skakel en installeer volgens die beoogde bedryfstelsel.
Installeer gnupg vir die invoer van MongoDB publieke GPG-sleutel.
sudo apt-get install gnupg
Voer nou die sleutel in deur die opdrag hieronder te gebruik.
wget -qO - //www.mongodb.org/static/pgp/server-4.2.asc | sudo apt-key add -
Skep die bronnelyslêer volgens jou Linux-verspreiding. Ons het die lys bronne soos per Debian bygevoeg.
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
Laat opdateringsopdrag uitvoer
sudo apt-get update
Installeer nou MongoDB deur die opdrag hieronder te gebruik.
sudo apt-get install -y mongodb-org
Sodra die installasie suksesvol is, begin MongoDB deur die opdrag hieronder te gebruik.
sudo systemctl start mongod
Gaan die status van MongoDB na deur die opdrag te gebruik.hieronder.
sudo systemctl status mongod
Verseker nou dat mongod outomaties begin met stelselherlaai deur die opdrag hieronder uit te reik.
sudo systemctl enable mongod
Kyk nou of jy kan koppel aan die MongoDB-bediener met behulp van mongo-kliënt.
mongo
Probeer in die mongo-dop die hulp gebruik en wys dbs-opdragte.
Skep 'n Flask-toepassing
Gebruik die opdrag hieronder om flask-appbuilder en mongoengine te installeer.
pip install flask-appbuilder pip install mongoengine pip install flask_mongoengine
Skep 'n skelet-toepassing met die waardes wat as opmerkings in die onderstaande kodebrokkie gewys word.
flask fab create-app # Give the following values in the command line questionnaire # Application Name: flaskTutorialApp # EngineType : MongoEngine
Ons sal die uitset soortgelyk aan die een hieronder sien.
Your new app name: exampleApp Your engine type, SQLAlchemy or MongoEngine (SQLAlchemy, MongoEngine) [SQLAlchemy]: MongoEngine Downloaded the skeleton app, good coding!
Kyk na die uitleg van die projek en die toepassing. Ons het die uitvoer van die boom-opdrag hieronder gewys.
Kom ons kyk na die Flask-konfigurasielêer. Dit is 'n verstekopstelling wat gegenereer word as die resultaat van die laaste opdrag. Uncomment Cyborg -tema, soos hieronder getoon.
# 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 die skeleton-toepassing te laat loop, gebruik die onderstaande opdrag op die terminale.
flask run
Flask Hello World
Om jou eerste program in die flaskTutorialApp te skep, maak lêer views.py oop onder die toepassinggids en voeg die volgende kode by. Soek vir invoerstellings wat in die lêer gegee word. Voeg hierdie stellings by indien dit nie reeds teenwoordig is nie.
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())
Stoor die lêer nadat die bogenoemde bronkode bygevoeg is. Gaan na die projek se wortelgids en gebruik die onderstaande opdrag om die Flask se ontwikkelingsbediener te laat loop.
flask run
Navigeer nou na //localhost:5000/hello/ om die uitvoer in te siendie blaaier.
Ontfouting
Die ontwikkelingsbediener loop tans nie in die Ontfoutmodus nie. Sonder ontfoutingsmodus is dit moeilik om die foute in die bronkode van die flestoepassing te vind.
Ontfoutmodus in fles lei tot die volgende:
- Ontfoutmodus aktiveer Outomatiese herlaaier. Dit beteken dat ons nie die ontwikkelingsbediener hoef te herbegin nadat ons veranderinge in die bronkode van die toepassing gemaak het nie.
- Ontfoutmodus aktiveer die Python-ontfouter. Ons kan die waardes van veranderlikes tydens die uitsondering inspekteer.
- Ontfoutmodus aktiveer flestoepassingontfouting. Ons kan die waardes van verskeie veranderlikes in ontfoutingsessies nagaan.
Stop die ontwikkelingsbediener as dit reeds aan die gang is. Jy kan CTRL + C of Sleutelbordonderbreking gebruik om dieselfde te doen.
Gebruik die volgende kode om die ontfoutmodus te aktiveer en die ontwikkelingsbediener tydelik te laat loop.
FLASK_ENV=development flask run
Soek die konsole vir Ontfouter-PIN en maak 'n aantekening daarvan.
Kom ons verander nou die bogenoemde HelloWorld-aansig met die volgende reëls van die kodebrokkie. Let daarop dat ons 'n pasgemaakte uitsondering ingestel het.
@expose("/") def hello(self): raise Exception("A custom exception to learn DEBUG Mode") return "Hello, World! from Software Testing Help"
Navigeer na //localhost:5000/hello/, en jy sal sien dat die toepassing 'n uitsondering veroorsaak het. Die blaaier vertoon die stapelspoor, soos hieronder getoon.
![](/wp-content/uploads/guides/iae5sr2a76-3.png)
Kyk verder na die konsole waar die ontwikkelingsbediener loop. Jy sal vind dat hierdie keer, dieveranderinge in die views.py word outomaties opgespoor, en die ontfoutbediener herbegin vanself. Nou hoef ons dit nie handmatig te herbegin nie.
Die konsole sal lyne hê, soos hieronder getoon. Ons moet die ontfoutings-PIN aanteken vir later.
* 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
Gaan nou die stapelspoor in die blaaier na en gaan na die laaste reël. Klik daarop om sy aansig uit te brei en klik op die CLI-ikoon om die dop in interaktiewe modus oop te maak.
![](/wp-content/uploads/guides/iae5sr2a76-4.png)
Sodra jy dit oopmaak, sal jy sien dat die blaaier 'n aansporing vir Ontfout PIN sal wys. Gee die Ontfout-PIN en klik op OK.
![](/wp-content/uploads/guides/iae5sr2a76-5.png)
Sodra ons voortgaan nadat ons die Ontfout-PIN gegee het, kan ons toegang tot die interaktiewe dop kry.
Ons kry toegang tot die dop van binne die blaaier en kan die waardes van veranderlikes inspekteer om die oorsaak van die uitsondering te vind en die fout op 'n beter manier te hanteer. Kyk asseblief na een van die voorbeelde wat in die prent hieronder getoon word.
![](/wp-content/uploads/guides/iae5sr2a76-6.png)
Verander nou die kode in view.py, soos hieronder getoon. Let daarop dat ons kommentaar gelewer het op die lyn wat die verhoogde uitsondering gehad het.
@expose("/") def hello(self): # raise Exception("A custom exception to learn DEBUG Mode") return "Hello, World! from Software Testing Help"
Toets die flestoepassing
Kom ons skryf nou ons eerste toets vir die flestoepassing wat ons ontwikkel. Installeer eers die PyTest. PyTest is 'n toetsraamwerk. Dit help ons om beter kode te skryf.
Boonop, net omdat ons eenheidstoetse kan skryf terwyl ons ons toepassings ontwikkel, is dit moontlik om die TDD-benadering te volg. TDD staan vir toetsgedrewe ontwikkeling. In ons daaropvolgende tutoriale vanhierdie reeks, sal ons altyd eers toetse skryf en ons sienings of modelle ontwikkel.
Installeer PyTest
pip install pytest
Skep nou 'n gids genaamd toetse binne die toepassinggids en daarin skep 'n lêer genaamd test_hello.py. Kom ons skryf ons eerste eenheidstoets om ons siening te toets.
Kopieer die volgende kodebrokkie en plak dit in 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
Gebruik die onderstaande pytest-opdrag om uit te voer die toetse. PyTest versamel outomaties die toetse en vertoon die resultate op die standaarduitvoer.
![](/wp-content/uploads/guides/iae5sr2a76-7.png)
Skep 'n GitHub-werkvloei
Ons gebruik Git-aksies om 'n CI/CD-werkvloei vir ons voorbeeldtoepassing te skep. Volg die onderstaande stappe vir jou projek.
Stap 1: Navigeer na die bewaarplekbladsy op GitHub. Klik op Git Actions.
![](/wp-content/uploads/guides/iae5sr2a76-8.png)
Stap 2: Scroll af op die bladsy en vind 'n bestaande werkvloeisjabloon vir 'n Python-pakket.
![](/wp-content/uploads/guides/iae5sr2a76-9.png)
Stap 3: Stel die Python-pakket Workflow op.
![](/wp-content/uploads/guides/iae5sr2a76-10.png)
Stap 4: Sodra die python-package.yml-werkvloeikonfigurasie oopmaak, dateer dit op gebaseer op die gegewe yaml bykomende merkerwaardes.
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
Ons wil ons Flask-toepassing op die nuutste Ubuntu Linux-verspreiding toets. Benewens die bedryfstelsel, wil ons ons toetse net met Python 3.7 en Python 3.8 laat loop.
Stap 5: Bewerk die python-pakket.yml met die opgedateerde waardes.
![](/wp-content/uploads/guides/iae5sr2a76-11.png)
Stap 6: Die commit in die vorige bladsy neem ons na die GitActionsjobs.
![](/wp-content/uploads/guides/iae5sr2a76-12.png)
Stap 7: [Opsioneel]
Op die Github Jobs-bladsy vir die voorbeeld-tutoriaaltoepassing kan ons 'n kenteken skep en plaas dit op die README.md-lêer om die boustatus te vertoon.
Nou, wanneer die veranderinge aan die hooftak toegepas word, sal Git Workflow, soos geskryf in python-package.yml gevolg word en op Git Actions uitgevoer word .
Gevolgtrekking
In hierdie tutoriaal het ons al die basiskonsepte gedek vanaf voorvereistes tot die opstel van CI/CD-werkvloei vir 'n webtoepassing wat ontwikkel is met behulp van Flask – 'n Python-gebaseerde webontwikkelingsraamwerk.
Hierdie tutoriaal dek alle nodige stappe soos die installering van Python, aflaai & installering van Flask, werk met Flask-Appbuilder, toets met PyTest, ens. om te begin met webontwikkeling deur Python te gebruik. Die webontwikkelingsgemeenskap vergelyk Flask gewoonlik met 'n ander gewilde Python-webontwikkelingsraamwerk genaamd Django.
Ons sal hierdie verskille verduidelik en sal ook hierdie raamwerke vergelyk in een van die tutoriale in hierdie reeks.