Titorial #5: Patróns de deseño de Flask e mellores prácticas para aplicacións web
Titorial #6: Titorial da API de Flask con exemplo
Este titorial introdutorio de Python Flask explica o que é Flask, instalación de Python, Virtualenv, Flask Hello World exemplo cunha sección sobre exemplos de código, depuración e probas:
O desenvolvemento de sitios web é máis unha arte que unha habilidade. Require paciencia e dilixencia, xunto con perseveranza, coraxe e dedicación para crear o necesario para que sexa un verdadeiro éxito. Nestes días, é esencial que os alumnos accedan canto antes.
Creamos este tutorial de Python Flask para que os estudantes se poñan ao día e implementen programación web sinxela e complexa usando Python 3. .
Este tutorial de Python Flask é máis parecido a un tutorial para principiantes de Flask, que cubrirá o instalación de Python, Virtualenv e outros paquetes esenciais. Nesta serie de tutoriais, tamén instalaremos Flask xunto cos outros complementos de Flask necesarios. Tamén incluímos unha sección sobre depuración de código, probas e integración continua usando Git Actions.
Lista de titoriais desta serie Flask
Tutorial n.º 1: Python Flask Titorial: Introdución a Flask para principiantes
Titorial #2: Modelo, formulario, visualización e redireccionamento de Flask con exemplos
Tutorial #3: Manexo de base de datos Flask: como usar Flask cunha base de datos
Titorial n.º 4: Aplicación Flask e deseño do proxecto Flask con Blueprint &pasos mencionados nos requisitos previos.
Paso 1: Instalar Python
Comproba se instalou Python 3 ou non. Se non é así, descarga Python 3 desde aquí e instálao segundo o teu sistema operativo.
Paso 2: cree un entorno virtual de Python
Cree un entorno virtual usando o comando de abaixo.
python3 -m venv venv
Utilice o comando de abaixo para activar o ambiente virtual de Python.
source venv/bin/activate
A continuación demos un exemplo de activación e desactivación do ambiente virtual.
Todos os comandos posteriores deste titorial deberían executarse nun ambiente virtual activado. Instala o paquete de rodas para que poidamos construír rodas dentro do contorno virtual.
pip install wheel
Paso 3: descarga e instalación de Flask
Debemos realizar os pasos de descarga de Flask e instala Flask seguindo os pasos que se indican a continuación.
Agora instala Flask.
pip install flask
Algúns de nós gústanos traballar coas últimas modificacións do código fonte. Podemos usar o comando que se indica a continuación para instalar cos últimos cambios nas fontes de Flask.
Fai un directorio temporal.
mkdir tmp
Agora instala Flask desde o repositorio de Github. Debes permanecer conectado a Internet para que funcione o seguinte comando.
pip3 install -e [email protected]:pallets/flask.git#egg=flask
Mira as saídas da consola para comprobar a instalación correcta. Agora comproba se podemos acceder aos comandos de Flask.
flask --help
É posible que vexa algunhas excepcións sobre a ausencia dun Flaskaplicación. Non obstante, descoide as porque non creamos ningunha aplicación Flask. A nosa aplicación é unha instancia de Flask, que é un envoltorio no marco web Werkzeug e no motor de modelos Jinja.
Werkzeug
Werkzeug é un conxunto de ferramentas WSGI. WSGI é só unha convención de chamada para que os servidores web reenvíen solicitudes web a aplicacións web escritas en linguaxe de programación Python.
Jinja
O modelo é un habilidades esenciais dos desenvolvedores web. Jinja é un motor de plantillas popular e completo para Python. É unha linguaxe bastante expresiva e ofrece un conxunto sólido de ferramentas para os autores de modelos.
Paso 4: Instalar MongoDB
Segue os pasos que se mencionan a continuación para instalar MongoDB. Describimos os pasos para instalalo nun Linux baseado en Debian. Se estás a usar outro sistema operativo, accede á ligazón e instálao segundo o sistema operativo previsto.
Instale gnupg para importar a clave GPG pública de MongoDB.
sudo apt-get install gnupg
Agora importa a chave usando o comando seguinte.
wget -qO - //www.mongodb.org/static/pgp/server-4.2.asc | sudo apt-key add -
Cree o ficheiro da lista de fontes segundo a súa distribución de Linux. Engadimos a lista de fontes segundo 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
Executar o comando de actualización
sudo apt-get update
Agora instala MongoDB usando o seguinte comando.
sudo apt-get install -y mongodb-org
Unha vez que a instalación teña éxito, inicie MongoDB usando o seguinte comando.
sudo systemctl start mongod
Comproba o estado de MongoDB usando o comandoa continuación.
sudo systemctl status mongod
Agora asegúrate de que mongod se inicie automaticamente ao reiniciar o sistema emitindo o comando que se mostra a continuación.
sudo systemctl enable mongod
Agora comprobe se podes conéctese ao servidor MongoDB mediante o cliente mongo.
mongo
No intérprete de comandos de mongo, proba a usar a axuda e amosa os comandos dbs.
Crea unha aplicación Flask
Utiliza o seguinte comando para instalar flask-appbuilder e mongoengine.
pip install flask-appbuilder pip install mongoengine pip install flask_mongoengine
Crea unha aplicación esqueleto cos valores que se mostran como comentarios no fragmento de código que aparece a continuación.
flask fab create-app # Give the following values in the command line questionnaire # Application Name: flaskTutorialApp # EngineType : MongoEngine.
Veremos unha saída similar á que se indica a continuación.
Your new app name: exampleApp Your engine type, SQLAlchemy or MongoEngine (SQLAlchemy, MongoEngine) [SQLAlchemy]: MongoEngine Downloaded the skeleton app, good coding!
Bótalle unha ollada ao deseño do proxecto e da aplicación. Amosamos a saída do comando da árbore a continuación.
Vexamos o ficheiro de configuración de Flask. É unha configuración predeterminada xerada como resultado do último comando. Elimina o comentario do tema Cyborg , como se mostra a continuació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
Para executar a aplicación skeleton, utiliza o comando que se indica a continuación no terminal.
flask run
Flask Hello World
Para crear o teu primeiro programa no flaskTutorialApp, abre o ficheiro views.py no directorio da aplicación e engade o seguinte código. Busque as declaracións de importación indicadas no ficheiro. Engade estas declaracións se aínda non están presentes.
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())
Garde o ficheiro despois de engadir o código fonte anterior. Vaia ao directorio raíz do proxecto e use o seguinte comando para executar o servidor de desenvolvemento do Flask.
flask run
Agora navegue ata //localhost:5000/hello/ para ver a saída eno navegador.
Depuración
Actualmente, o servidor de desenvolvemento non se executa no modo Depuración. Sen o modo de depuración, é difícil atopar os erros no código fonte da aplicación Flask.
O modo de depuración en Flask dá como resultado o seguinte:
- O modo de depuración activa o recargador automático. Significa que non necesitamos reiniciar o servidor de desenvolvemento despois de facer cambios no código fonte da aplicación.
- O modo depuración activa o depurador de Python. Podemos inspeccionar os valores das variables durante a Excepción.
- O modo depuración activa a depuración da aplicación Flask. Podemos comprobar os valores de varias variables nas sesións de depuración.
Detén o servidor de desenvolvemento se xa está en execución. Podes usar CTRL + C ou a interrupción do teclado para facer o mesmo.
Utiliza o seguinte código para activar o modo de depuración e executa o servidor de desenvolvemento temporalmente.
FLASK_ENV=development flask run
Buscar a consola para o PIN do depurador e anótao.
Agora imos cambiar a vista de HelloWorld escrita anteriormente coas seguintes liñas do fragmento de código. Teña en conta que introducimos unha excepción personalizada.
@expose("/") def hello(self): raise Exception("A custom exception to learn DEBUG Mode") return "Hello, World! from Software Testing Help"
Navegue ata //localhost:5000/hello/ e verá que a aplicación provocou unha excepción. O navegador mostra o rastrexo da pila, como se mostra a continuación.
![](/wp-content/uploads/guides/iae5sr2a76-3.png)
Ademais, mire a consola onde se está a executar o servidor de desenvolvemento. Descubrirás que esta vez, oos cambios no views.py detéctanse automaticamente e o servidor de depuración reinicia por si só. Agora non necesitamos reinicialo manualmente.
A consola terá liñas, como se mostra a continuación. Debemos anotar o PIN de depuración para máis tarde.
* 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
Agora comprobe o rastrexo da pila no navegador e vai á última liña. Fai clic nel para ampliar a súa vista e fai clic na icona da CLI para abrir o intérprete de comandos en modo interactivo.
![](/wp-content/uploads/guides/iae5sr2a76-4.png)
Unha vez que o abras, verás que o navegador mostrará unha solicitude de PIN de depuración. Dea o PIN de depuración e prema en Aceptar.
![](/wp-content/uploads/guides/iae5sr2a76-5.png)
Unha vez que procedamos despois de dar o PIN de depuración, poderemos acceder ao intérprete de comandos interactivo.
Accedemos ao intérprete de comandos dende o navegador e pode inspeccionar os valores das variables para atopar a causa da excepción e xestionar o erro dunha mellor forma. Mira un dos exemplos que se mostran na imaxe de abaixo.
![](/wp-content/uploads/guides/iae5sr2a76-6.png)
Agora cambia o código en view.py, como se mostra a continuación. Teña en conta que comentamos a liña que tiña a excepción.
@expose("/") def hello(self): # raise Exception("A custom exception to learn DEBUG Mode") return "Hello, World! from Software Testing Help"
Probando a aplicación Flask
Agora imos escribir a nosa primeira proba para a aplicación Flask que estamos a desenvolver. Primeiro, instala o PyTest. PyTest é un marco de proba. Axúdanos a escribir un código mellor.
Ademais, só porque podemos escribir probas unitarias mentres desenvolvemos as nosas aplicacións, é posible seguir o enfoque TDD. TDD son as siglas de Test-Driven Development. Nos nosos seguintes titoriais deEsta serie, sempre escribiremos probas primeiro e desenvolveremos as nosas vistas ou modelos.
Instalar PyTest
pip install pytest
Agora cree un directorio chamado tests dentro do directorio da aplicación e nese crea un ficheiro chamado test_hello.py. Escribamos a nosa primeira proba unitaria para probar a nosa vista.
Copie o seguinte fragmento de código e pégueo 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
Utilice o seguinte comando pytest para executalo as probas. PyTest recolle automaticamente as probas e mostra os resultados na saída estándar.
![](/wp-content/uploads/guides/iae5sr2a76-7.png)
Crear un fluxo de traballo de GitHub
Utilizamos Git Actions para crear un fluxo de traballo CI/CD para a nosa aplicación de mostra. Sigue os pasos que se indican a continuación para o teu proxecto.
Paso 1: vai á páxina do repositorio en GitHub. Fai clic en Git Actions.
![](/wp-content/uploads/guides/iae5sr2a76-8.png)
Paso 2: desprázate cara abaixo na páxina e busca un modelo de fluxo de traballo existente para un paquete de Python.
![](/wp-content/uploads/guides/iae5sr2a76-9.png)
Paso 3: Configure o fluxo de traballo do paquete Python.
![](/wp-content/uploads/guides/iae5sr2a76-10.png)
Paso 4: Unha vez que se abra a configuración do fluxo de traballo python-package.yml, actualízao en función do yaml adicional indicado. valores de 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
Queremos probar a nosa aplicación Flask na última distribución de Ubuntu Linux. Ademais do SO, queremos executar as nosas probas só usando Python 3.7 e Python 3.8.
Paso 5: comprometa o python-package.yml cos valores actualizados.
![](/wp-content/uploads/guides/iae5sr2a76-11.png)
Paso 6: a confirmación da páxina anterior lévanos a GitActionstraballos.
![](/wp-content/uploads/guides/iae5sr2a76-12.png)
Paso 7: [Opcional]
Na páxina de Traballos de Github para a aplicación de titorial de mostra, podemos crear unha insignia e colocar no ficheiro README.md para mostrar o estado da compilación.
Agora, sempre que se realicen os cambios na rama mestra, seguirase e executarase en Git Actions o fluxo de traballo de Git, tal como está escrito en python-package.yml. .
Conclusión
Neste titorial, cubrimos todos os conceptos básicos desde os requisitos previos ata a configuración do fluxo de traballo CI/CD para unha aplicación web desenvolvida usando Flask – Un marco de desenvolvemento web baseado en Python.
Este tutorial abarca todos os pasos necesarios como instalar Python, descargar & instalar Flask, traballar con Flask-Appbuilder, probar con PyTest, etc. para comezar co desenvolvemento web usando Python. A comunidade de desenvolvemento web adoita comparar Flask con outro marco de desenvolvemento web Python popular chamado Django.
Explicaremos estas diferenzas e tamén compararemos estes marcos nun dos titoriais desta serie.