Tutorial núm. 5: Patrons de disseny de Flask i bones pràctiques per a aplicacions web
Tutorial núm. 6: Tutorial de Flask API amb exemple
Aquest tutorial introductori de Python Flask explica què és Flask, instal·lació de Python, Virtualenv, Flask Hello World exemple amb una secció sobre exemples de codi, depuració i proves:
El desenvolupament de llocs web és més un art que una habilitat. Requereix paciència i diligència, juntament amb perseverança, coratge i dedicació per crear el necessari perquè sigui un veritable èxit. En aquests dies, és essencial que els estudiants arribin a la velocitat tan aviat com sigui possible.
Hem creat aquest tutorial de Python Flask perquè els estudiants es posin al dia i implementin una programació web senzilla i complexa amb Python 3. .
Aquest tutorial de Python Flask s'assembla més a un tutorial per a principiants de Flask, que cobrirà instal·lació de Python, Virtualenv i altres paquets essencials. En aquesta sèrie de tutorials, també instal·larem Flask juntament amb els altres connectors necessaris de Flask. També hem inclòs una secció sobre depuració de codi, proves i integració contínua amb Git Actions.
Llista de tutorials d'aquesta sèrie de Flask
Tutorial núm. 1: Python Flask Tutorial: Introducció a Flask per a principiants
Tutorial núm. 2: Plantilla, formulari, visualització i redirecció de Flask amb exemples
Tutorial núm. 3: Gestió de la base de dades Flask: com utilitzar Flask amb una base de dades
Tutorial núm. 4: Aplicació Flask i disseny del projecte Flask amb Blueprint &passos esmentats als requisits previs.
Pas 1: instal·leu Python
Comproveu si heu instal·lat Python 3 o no. Si no és així, baixeu Python 3 des d'aquí i instal·leu-lo segons el vostre sistema operatiu.
Pas 2: creeu un entorn virtual de Python
Creeu un entorn virtual amb el sota l'ordre.
python3 -m venv venv
Utilitzeu l'ordre següent per activar l'entorn virtual de Python.
source venv/bin/activate
A continuació hem donat un exemple d'activació i desactivació de l'entorn virtual.
Totes les ordres posteriors d'aquest tutorial s'han d'executar en un entorn virtual activat. Instal·leu el paquet de rodes perquè puguem construir rodes dins de l'entorn virtual.
pip install wheel
Pas 3: descàrrega i instal·lació de Flask
Hem de realitzar els passos de descàrrega de Flask i instal·leu Flask seguint els passos esmentats a continuació.
Ara instal·leu Flask.
pip install flask
A alguns de nosaltres ens agrada treballar amb els darrers canvis al codi font. Podem utilitzar l'ordre que s'indica a continuació per instal·lar amb els darrers canvis a les fonts de Flask.
Feu un directori temporal.
mkdir tmp
Ara instal·leu Flask des del dipòsit de Github. Heu de romandre connectat a Internet perquè l'ordre següent funcioni.
pip3 install -e [email protected]:pallets/flask.git#egg=flask
Mireu les sortides de la consola per comprovar la instal·lació correcta. Ara comproveu si podem accedir a les ordres de Flask.
flask --help
És possible que vegeu algunes excepcions sobre l'absència d'un Flaskaplicació. Tanmateix, oblideu-los, ja que no hem creat cap aplicació Flask. La nostra aplicació és una instància de Flask, que és un embolcall del marc web Werkzeug i del motor de plantilles Jinja.
Werkzeug
Werkzeug és un conjunt d'eines WSGI. WSGI és només una convenció de trucada per als servidors web per reenviar sol·licituds web a aplicacions web escrites en llenguatge de programació Python.
Jinja
La plantilla és una habilitats essencials dels desenvolupadors web. Jinja és un motor de plantilles popular i complet per a Python. És un llenguatge força expressiu i proporciona un conjunt robust d'eines als autors de plantilles.
Pas 4: instal·leu MongoDB
Seguiu els passos esmentats a continuació per instal·lar MongoDB. Hem descrit els passos per instal·lar-lo en un Linux basat en Debian. Si feu servir un altre sistema operatiu, accediu a l'enllaç i instal·leu-lo segons el sistema operatiu previst.
Instal·leu gnupg per importar la clau GPG pública de MongoDB.
sudo apt-get install gnupg
Ara importeu la clau amb l'ordre següent.
wget -qO - //www.mongodb.org/static/pgp/server-4.2.asc | sudo apt-key add -
Creeu el fitxer de llista de fonts segons la vostra distribució de Linux. Hem afegit la llista de fonts segons 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
Executeu l'ordre d'actualització
sudo apt-get update
Ara instal·leu MongoDB, utilitzant l'ordre següent.
sudo apt-get install -y mongodb-org
Un cop la instal·lació tingui èxit, inicieu MongoDB amb l'ordre següent.
sudo systemctl start mongod
Comproveu l'estat de MongoDB mitjançant l'ordrea continuació.
sudo systemctl status mongod
Ara assegureu-vos que mongod s'iniciï automàticament en reiniciar el sistema emetent l'ordre que es mostra a continuació.
sudo systemctl enable mongod
Ara comproveu si podeu connecteu-vos al servidor MongoDB mitjançant el client mongo.
mongo
A l'intèrpret d'ordres mongo, proveu d'utilitzar l'ajuda i mostra les ordres dbs.
Crea una aplicació Flask
Utilitzeu l'ordre següent per instal·lar flask-appbuilder i mongoengine.
pip install flask-appbuilder pip install mongoengine pip install flask_mongoengine
Creeu una aplicació esquelet amb els valors que es mostren com a comentaris al fragment de codi següent.
flask fab create-app # Give the following values in the command line questionnaire # Application Name: flaskTutorialApp # EngineType : MongoEngine.
Veurem una sortida semblant a la que es mostra a continuació.
Your new app name: exampleApp Your engine type, SQLAlchemy or MongoEngine (SQLAlchemy, MongoEngine) [SQLAlchemy]: MongoEngine Downloaded the skeleton app, good coding!
Fes una ullada a la disposició del projecte i de l'aplicació. Hem mostrat la sortida de l'ordre d'arbre a continuació.
Fem una ullada al fitxer de configuració de Flask. És una configuració predeterminada generada com a resultat de l'última ordre. Descomenteu el tema Cyborg , com es mostra a continuació.
# 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
Per executar l'aplicació skeleton, utilitzeu l'ordre que s'indica a continuació al terminal.
flask run
Flask Hello World
Per crear el vostre primer programa a flaskTutorialApp, obriu el fitxer views.py al directori de l'aplicació i afegiu el codi següent. Busqueu les declaracions d'importació que es donen al fitxer. Afegiu aquestes declaracions si encara no estan presents.
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())
Deseu el fitxer després d'afegir el codi font anterior. Aneu al directori arrel del projecte i utilitzeu l'ordre següent per executar el servidor de desenvolupament del Flask.
flask run
Ara navegueu a //localhost:5000/hello/ per veure la sortida ael navegador.
Depuració
Actualment, el servidor de desenvolupament no s'està executant en el mode Depuració. Sense el mode de depuració, és difícil trobar els errors al codi font de l'aplicació Flask.
El mode de depuració de Flask dóna com a resultat el següent:
- El mode de depuració activa el recarregador automàtic. Significa que no hem de reiniciar el servidor de desenvolupament després de fer canvis al codi font de l'aplicació.
- El mode depuració activa el depurador de Python. Podem inspeccionar els valors de les variables durant l'excepció.
- El mode depuració habilita la depuració de l'aplicació Flask. Podem comprovar els valors de diverses variables en sessions de depuració.
Atureu el servidor de desenvolupament si ja s'està executant. Podeu utilitzar CTRL + C o la interrupció del teclat per fer el mateix.
Utilitzeu el codi següent per habilitar el mode de depuració i executar el servidor de desenvolupament temporalment.
FLASK_ENV=development flask run
Cerca la consola del PIN del depurador i anoteu-ne.
Ara canviem la vista HelloWorld escrita anteriorment amb les següents línies del fragment de codi. Observeu que hem introduït una excepció personalitzada.
@expose("/") def hello(self): raise Exception("A custom exception to learn DEBUG Mode") return "Hello, World! from Software Testing Help"
Navegueu a //localhost:5000/hello/ i veureu que l'aplicació ha generat una excepció. El navegador mostra la traça de la pila, tal com es mostra a continuació.
![](/wp-content/uploads/guides/iae5sr2a76-3.png)
A més, mireu la consola on s'executa el servidor de desenvolupament. Trobareu que aquesta vegada, elels canvis al views.py es detecten automàticament i el servidor de depuració es reinicia per si mateix. Ara no cal reiniciar-lo manualment.
La consola tindrà línies, com es mostra a continuació. Hem d'anotar el PIN de depuració per a més endavant.
* 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
Ara comproveu el rastre de la pila al navegador i aneu a l'última línia. Feu-hi clic per ampliar la seva visió i feu clic a la icona CLI per obrir l'intèrpret d'ordres en mode interactiu.
![](/wp-content/uploads/guides/iae5sr2a76-4.png)
Un cop l'obriu, veureu que el navegador mostrarà una sol·licitud de PIN de depuració. Doneu el PIN de depuració i feu clic a D'acord.
![](/wp-content/uploads/guides/iae5sr2a76-5.png)
Un cop seguim endavant després de donar el PIN de depuració, podem accedir a l'intèrpret d'ordres interactiu.
Accedem a l'intèrpret d'ordres des del navegador i pot inspeccionar els valors de les variables per trobar la causa de l'excepció i gestionar l'error d'una manera millor. Si us plau, mireu un dels exemples que es mostren a la imatge següent.
![](/wp-content/uploads/guides/iae5sr2a76-6.png)
Ara canvieu el codi a view.py, tal com es mostra a continuació. Tingueu en compte que hem comentat la línia que tenia l'excepció plantejada.
@expose("/") def hello(self): # raise Exception("A custom exception to learn DEBUG Mode") return "Hello, World! from Software Testing Help"
Prova de l'aplicació Flask
Ara anem a escriure la nostra primera prova per a l'aplicació Flask que estem desenvolupant. Primer, instal·leu el PyTest. PyTest és un marc de proves. Ens ajuda a escriure millor codi.
A més, només perquè podem escriure proves unitàries mentre desenvolupem les nostres aplicacions, és possible seguir l'enfocament TDD. TDD són les sigles de Test-Driven Development. En els nostres tutorials posteriors deaquesta sèrie, sempre escriurem proves primer i desenvoluparem les nostres vistes o models.
Instal·leu PyTest
pip install pytest
Ara creeu un directori anomenat tests dins del directori de l'aplicació i en aquest creeu un fitxer anomenat test_hello.py. Escrivim la nostra primera prova d'unitat per provar la nostra vista.
Copieu el fragment de codi següent i enganxeu-lo a 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
Utilitzeu l'ordre pytest següent per executar-lo les proves. PyTest recull automàticament les proves i mostra els resultats a la sortida estàndard.
![](/wp-content/uploads/guides/iae5sr2a76-7.png)
Crea un flux de treball de GitHub
Fem servir Git Actions per crear un flux de treball CI/CD per a la nostra aplicació de mostra. Seguiu els passos esmentats a continuació per al vostre projecte.
Pas 1: aneu a la pàgina del repositori a GitHub. Feu clic a Git Actions.
![](/wp-content/uploads/guides/iae5sr2a76-8.png)
Pas 2: desplaceu-vos cap avall a la pàgina i trobeu una plantilla de flux de treball existent per a un paquet de Python.
![](/wp-content/uploads/guides/iae5sr2a76-9.png)
Pas 3: configureu el flux de treball del paquet Python.
![](/wp-content/uploads/guides/iae5sr2a76-10.png)
Pas 4: un cop s'obri la configuració del flux de treball de python-package.yml, actualitzeu-la en funció de l'addicional de yaml donat valors de l'etiqueta.
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
Volem provar la nostra aplicació Flask a la darrera distribució d'Ubuntu Linux. A més del sistema operatiu, volem executar les nostres proves només amb Python 3.7 i Python 3.8.
Pas 5: comprometeu el python-package.yml amb els valors actualitzats.
![](/wp-content/uploads/guides/iae5sr2a76-11.png)
Pas 6: la confirmació de la pàgina anterior ens porta a GitActionstreballs.
![](/wp-content/uploads/guides/iae5sr2a76-12.png)
Pas 7: [Opcional]
A la pàgina de treballs de Github per a l'aplicació tutorial de mostra, podem crear una insígnia i col·locar al fitxer README.md per mostrar l'estat de la compilació.
Ara, sempre que els canvis es comprometin a la branca mestra, Git Workflow, tal com està escrit a python-package.yml, es seguirà i s'executarà a Git Actions. .
Conclusió
En aquest tutorial, hem cobert tots els conceptes bàsics, des dels requisits previs fins a la configuració del flux de treball CI/CD per a una aplicació web desenvolupada amb Flask: un marc de desenvolupament web basat en Python.
Aquest tutorial cobreix tots els passos necessaris, com ara instal·lar Python, descarregar & instal·lar Flask, treballar amb Flask-Appbuilder, provar amb PyTest, etc. per començar amb el desenvolupament web amb Python. La comunitat de desenvolupament web normalment compara Flask amb un altre marc de desenvolupament web Python popular anomenat Django.
Anem a explicar aquestes diferències i també els compararem en un dels tutorials d'aquesta sèrie.