flask app flask project layout with blueprint bootstrap
Aquest tutorial explica com utilitzar Flask App, Flask Blueprint i Flask Bootstrap en un projecte Flask:
En aquest tema, ens apartarem una mica de l’arquetip de Flask-Appbuilder per construir la nostra comprensió de Flask Blueprints. Llegiu el nostre tutorial sobre Flask, Plantilles i visualitzacions de Flask i Flask amb bases de dades com MongoDB, SQLite i MySQL. Hem utilitzat un exemple de projecte anomenat flaskTutorialApp.
Tot i això, també podeu crear el projecte des de zero mitjançant l’ordre flask fab create-app. Aquesta ordre crea les bastides necessàries per a un projecte Flask juntament amb un directori d'aplicació basat en el nom d'aplicació que heu proporcionat.
=> Consulteu la sèrie d’entrenament de Flask per a tothom
En aquest tutorial, expliquem sobre Flask App, Flask Blueprint i Flask Bootstrap. Desenvolupem la nostra aplicació Flask inicialment amb les bastides preexistents proporcionades per Flask-Appbuilder. A continuació, creem un Flask Blueprint anomenat hello2. Finalment, descriurem el concepte Flask Docker mitjançant la connexió de la nostra aplicació Flask.
Què aprendreu:
Aplicació Flask
Flask App és un altre nom per a una aplicació Flask. Si observeu el codi escrit al fitxer __init__.py, notareu que es crea una instància de Flask i que la variable s’anomena app. La instància de la classe Flask és l'aplicació Flask, que és la instància de l'aplicació WSGI.
from flask import Flask app = Flask(__name__)
Plànol de matràs
Flask Blueprint ens permet mantenir les funcions relacionades juntes i ajuda en millors pràctiques de desenvolupament. Alguns dels avantatges de Flask Blueprints són els següents:
- Fàcil organització d'aplicacions a gran escala.
- Augmenta la reutilització del codi registrant el mateix Blueprint diverses vegades.
- Es registren un conjunt d'operacions que es poden reproduir posteriorment després de registrar un pla.
Amb els antecedents anteriors donats a Flask Blueprint, podem avançar i dissenyar el nostre primer Blueprint. També podem pensar en Blueprint com un mòdul. Creem un pla HelloWorld.
Tots els components, recursos i funcions d'un pla es conserven i s'organitzen per separat de l'altre codi font de l'aplicació Flask. Vol dir que un Flask Blueprint pot tenir les seves vistes, formularis, models, fitxers estàtics i plantilles.
Podeu crear diversos plànols a partir del mateix conjunt de recursos. Tanmateix, és probable que això generi confusió i no és una bona pràctica.
Creeu fitxers i directoris de Flask Blueprint
Comencem a crear un Flask Blueprint amb el nom de hello2. Utilitzeu l'script que es mostra a continuació per crear l'estructura de directoris després d'activar l'entorn virtual mitjançant l'ús de la font venv / bin / activate després d'anar al directori de l'aplicació.
blueprint_name='hello2' mkdir '$blueprint_name' mkdir -p '$blueprint_name/templates/$blueprint_name' touch '$blueprint_name/templates/$blueprint_name/hello.html' mkdir '$blueprint_name/static/' touch '$blueprint_name/__init__.py' touch '$blueprint_name/views.py'
Volem que el nostre pla hello2 tingui les seves opinions que importarem al seu __init__.py. Creem un directori independent per al nostre pla amb plantilles i directoris estàtics per representar vistes de Flask i servir recursos estàtics, respectivament.
Estructura del directori de Flask Blueprint
L'estructura de directoris del pla hauria de ser la següent: Utilitzeu l'ordre arbre per crear una sortida similar.
Create Flask Blueprint View
Ara definim una vista senzilla a views.py. Obriu hello2 / views.py i introduïu el fragment de codi que es mostra a continuació.
from flask import Blueprint, render_template hello2 = Blueprint( 'hello2', __name__, template_folder='templates', static_folder='static' ) @hello2.route('/hello2') def hello2_view(): greeting = 'Hello World 2' return render_template('hello2/hello.html', greeting=greeting)
Importem la classe Blueprint i el mètode render_template. A continuació, creem un objecte Blueprint donant els noms de la plantilla i els directoris estàtics.
A continuació, definim una ruta, mitjançant el decorador @ hello2.route, i un controlador amb el nom hello2_view. Aquest controlador és una funció Python. En aquesta funció, assignem un valor a una variable anomenada greeting i després el passem al mètode render_template.
Crea una plantilla de pla de flascó
Ara anem a crear la plantilla hello.html. Si heu llegit els nostres tutorials anteriors, heu d’haver notat que la plantilla porta el mateix nom que la que vam crear per distribuir la vista HelloWorld. Per a aquest pla hello2, creem una nova plantilla ampliant l'anterior.
A més, observeu que hem utilitzat un camí semàntic hello2 / hello.html mentre cridem render_template per representar la salutació a la plantilla. Aquest patró evita conflictes entre les plantilles dels mateixos noms.
Utilitzeu el fragment de codi que es mostra a continuació per crear hello.html i desar-lo a hello2 / templates / hello2 / path.
{% extends 'hello.html' %} {% block hello %} {{ greeting }} , from Software Testing Help.
{% endblock %}
Aquesta plantilla és gairebé similar a la hello.html. Tanmateix, hereta la majoria de les seves parts HTML de hello.html. Fixeu-vos en l'ús de {% block hello%} i {% endblock%}. El bloc hello a hello2 / hello.html substitueix el bloc hello de la plantilla base hello.html.
Ara obrim el fitxer __init__.py del pla hello2 i esmentem el codi que s'indica a continuació.
from app.hello2.views import * # expose all views at the blueprint level
En aquesta declaració, importem tots els mètodes decorats que hem creat a views.py del pla hello2. Si cal, només podem importar els mètodes / controladors que estiguin preparats per utilitzar-se o provar-se.
Registre d'un pla de Flask amb l'aplicació Flask
Ara obrim __init__.py al directori de l’aplicació Flask i registrem el nostre pla hello2 tal com es mostra al codi següent.
from app.hello2 import hello2 app.register_blueprint(hello2, url_prefix='/hello2')
També aquí, tingueu en compte que podem importar visualitzacions de manera selectiva i registrar només les que estiguin a punt per utilitzar-les o provar-les.
Executem la nostra aplicació Flask en mode de depuració amb l'ordre python run.py des del directori arrel del projecte i anem a http: // localhost: 8080 / hello2 per veure si la vista de hello2 funciona bé.
El resultat al navegador hauria de ser similar a l’exemple que es mostra a continuació.

Treballem en una millor presentació del pla hello2 mitjançant el marc d’arrencada d’arrencada de Twitter. A més, a la secció següent, obtindreu més informació sobre els paràmetres opcionals per canviar el comportament d'un pla de flascó. Vegem-ho amb l'ajut d'un exemple de Flask Blueprint anomenat Flask Bootstrap.
Exemple d'aplicació de Flask modular amb Flask Blueprint
Basant-nos en el nostre aprenentatge de hello2 Flask Blueprint, afegim alguns plànols més per entendre com podem crear aplicacions modulars a Flask.
Suposem que tenim una aplicació web que serveix contingut per als visitants en forma de llibres electrònics, tutorials i cursos. També té algun contingut addicional sobre informació sobre l’equip i una pàgina principal.
Si intentem acomodar aquestes noves funcions a l’aplicació existent, haurem de crear vistes a views.py i les plantilles corresponents al directori de plantilles d’aplicació. De la mateixa manera, hem de crear models i formularis a models.py i forms.py.
Tanmateix, mantenir tot el codi de l’aplicació serà complicat i la col·laboració amb els altres membres de l’equip serà massa complicada i pot provocar conflictes de comissió o un flux de treball de desenvolupament complex.
Actualment, en aquest enfocament convencional, l'estructura de l'aplicació és la que es mostra a continuació.
Per evitar aquest escenari, podem fer servir Flask Blueprints per crear mòduls específics per a les funcions i el contingut respectiu. Creem alguns plans de Flask, amb els seus recursos separats.
Cadascun dels dissenys de Flask Blueprint tindrà un aspecte similar al que es mostra a continuació.
Utilitzeu l'script que es mostra a continuació per crear els fitxers i directoris necessaris per als plans de Flask planificats. Executeu aquest script des del directori arrel del projecte.
cd app for dir in home courses tutorials ebooks do echo 'generating files for $dir ..' mkdir -p $dir/templates/$dir touch $dir/templates/$dir/$dir.html mkdir $dir/static touch $dir/static/style.css touch $dir/__init__.py touch $dir/views.py touch $dir/models.py touch $dir/forms.py done
Primer creem funcions per al mòdul d’inici.
Obriu views.py al directori inicial i actualitzeu-lo amb el codi que es mostra a continuació.
from flask import render_template, Blueprint home = Blueprint('home', __name__, template_folder='templates', static_folder='static') @home.route('/') def index(): return render_template('home/home.html')
En aquest fitxer, hem importat la classe Blueprint de Flask i l’hem creat amb els paràmetres necessaris amb plantilles separades i una carpeta estàtica. A continuació, fem servir la decoració @home per declarar la ruta associada del mètode de visualització anomenat índex.
Ara creeu una plantilla base.html Jinja2 al directori de plantilles de l'aplicació. Utilitzeu el codi que es mostra a continuació per actualitzar el fitxer.
from Software Testing Help.
Learn More >> {% endblock %}
Hem ampliat des de la base.html de Bootstrap. Fixeu-vos en l’ús de div del contenidor de classe i de la unitat heroi A més, hem creat un botó perquè els usuaris en puguin obtenir més informació. Hem modificat aquest HTML i hem utilitzat classes del framework Bootstrap de Twitter.
Actualitzeu la pàgina del navegador a http: // localhost: 8080 / hello2.html per veure l’aspecte canviat de hello2.html.
La visualització de Changed Hello2 serà similar a la que es mostra a continuació.

L'ús de Flask-Bootstrap depèn totalment dels blocs disponibles per modificar o anul·lar. Podem utilitzar els blocs esmentats a continuació per personalitzar l’experiència. Es pot veure una llista detallada de tots els possibles blocs a https://pythonhosted.org/Flask-Bootstrap/basic-usage.html.
De vegades, quan només volem esmenar un bloc en lloc de substituir-lo completament, podem utilitzar la funció super () de Jinja2 per aconseguir els resultats.
Creeu un fitxer anomenat hello2.css a hello2 / static i col·loqueu el fragment de codi següent per donar estil al color del paràgraf a hello2 / hello.html.
p { color: orange; }
Agafeu el fragment de codi que es mostra a continuació i col·loqueu-lo a hello2 / hello.html.
{% block styles } {{ super() }} {% endblock %}
Ara obriu views.py del Flask Blueprint hello2 i modifiqueu la declaració de blueprint com es mostra a continuació.
hello2 = Blueprint('hello2', __name__, template_folder='templates', static_folder='static')
Aneu a l'URL registrat de Flask Blueprint, és a dir, http: // localhost: 8080 / hello2 de nou. El resultat dels canvis fets fins ara hauria de ser el que es mostra a continuació.

Flask Docker
Docker ajuda a contenir una aplicació. Aïlla l’entorn que necessita l’aplicació Flask de manera que no es requereixi entorns virtualitzats complets, com ara màquines virtuals.
A més, els contenidors docker tenen una petjada mínima i són més còmodes de gestionar i escalar amb l'ajuda d'una plataforma d'orquestració. Actualment, quan totes les altres aplicacions també tenen un desplegament en contenidors, nosaltres també hem d’aprendre a desplegar la nostra aplicació de mostra com a contenidor d’acoblament.
Un contenidor basat en Linux pot funcionar amb Windows i un MAC. Per tant, una aplicació Flask acoblable es pot implementar en qualsevol sistema operatiu independentment del sistema operatiu en què es va construir.
En aquesta secció, explicarem els passos per acoblar una aplicació Flask. Dockeritzarem aquest projecte perquè es pugui desplegar en un contenidor amb totes les dependències incloses al seu interior.
Primer, instal·leu Docker a la vostra màquina.
sudo apt-get install docker.io
Un cop finalitzada la instal·lació, aneu al directori arrel del nostre projecte de mostra i creeu un fitxer Dockerfile.
Escriviu el codi que es mostra a continuació en aquest fitxer Docker.
FROM python:3 ADD . /flaskTutorialApp WORKDIR /flaskTutorialApp RUN pip install -r requirements.txt ENTRYPOINT ('python') CMD ('run.py')
Actualitzeu el fitxer config.py i canvieu la base de dades a SQLite, tal com es mostra a continuació.
# The SQLAlchemy connection string. SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'app.db') # SQLALCHEMY_DATABASE_URI = 'mysql://myapp@localhost/myapp'
A més, si és la primera vegada que treballeu amb SQLite en aquesta sèrie de tutorials, creeu l’usuari administrador mitjançant l’ordre flask fab create-admin.
Comproveu si l'usuari d'administrador pot iniciar sessió a l'aplicació.
Ara creeu la imatge d'acoblament de la nostra aplicació de mostra mitjançant l'ordre següent.
sudo docker build --tag flask-tutorial
Aquesta ordre triga un temps a baixar recursos del centre de connexió. Un cop completada aquesta ordre, comproveu que les imatges hagin aparegut mitjançant l'ordre següent.
sudo docker images
Ara executeu aquesta imatge Docker creada recentment.
sudo docker run -p 5001:8080 flask-tutorial:latest
La consola mostrarà els missatges de registre del servidor de desenvolupament.
La instal·lació de Docker dóna lloc a la creació d’una NIC virtual amb el nom docker0. Cerqueu l'adreça IP mitjançant l'ordre sudo ifconfig. Un cop obtingueu la IP de Docker, podeu accedir a l'aplicació navegant fins a l'URL que es mostra a continuació.
http: //: 5001
Un cop tingueu confiança en el desenvolupament de l'aplicació, podeu desplegar la vostra imatge Docker al Docker Hub perquè els altres la puguin descarregar i utilitzar.
Prova del pla de matràs
Ara anem a crear algunes proves per provar el Blueprint hello2. Vegem si la nostra aplicació de mostra retorna el codi HTTP correcte quan el client envia o no una sol·licitud d'obtenció de recursos al punt final / hello2. Si recordeu, vam registrar el nostre Flask Blueprint hello2 amb un url_prefix amb el valor com / hello2.
millors aplicacions espia per a telèfons Android
Creeu un fitxer anomenat test_blueprint.py sota proves i afegiu-hi la prova següent.
def test_hello2(client): resp = client.get('/hello2') assert 308 == resp.status_code
HTTP 308 pertany a la redirecció permanent i s’espera que la nostra aplicació Flask necessiti redirigir la sol·licitud als recursos relacionats amb el pla anomenat hello2.
Afegim ara una altra prova per comprovar la ruta arrel dels recursos del nostre pla. Afegim una prova per veure si té un valor o no.
from app.hello2 import hello2 def test_rootpath(): assert hello2.root_path is not None
Ara executem aquestes proves junt amb les altres proves per assegurar-nos que estan superant.
pytest -v
Veureu una sortida similar dels resultats de la prova, com es mostra a continuació.

Ara confieu tots els canvis a la reposició i publiqueu-los al dipòsit remot a Github. Compareu les diferències amb el codi amb el de la branca mestra i creeu una sol·licitud d'extracció si no hi ha conflictes.
La sol·licitud d'extracció invoca els treballs de construcció que formen part del nostre flux de treball de Github. Si totes les comprovacions de les sol·licituds d'extracció del tutorial-4 no fallen, podem fusionar aquesta branca amb el mestre amb seguretat.

Preguntes freqüents
P # 1) Què és Flask BluePrint?
Resposta: Flask Blueprint és una manera d’estructurar una aplicació Flask en mòduls més petits i reutilitzables. Un Flask Blueprint té recursos separats, com ara visualitzacions, plantilles, fitxers estàtics, models, formularis, etc. Utilitzem l'enfocament Flask Blueprint per crear aplicacions Flask fàcilment mantenibles i escalables.
Q # 2) Com s'utilitza Flask Blueprint?
Resposta: Per utilitzar Flask Blueprint, l’hem d’importar i registrar amb l’objecte Flask Application, mitjançant el mètode app.register_blueprint. Podem passar un valor al paràmetre url_prifix per avançar un camí a les rutes del Flask Blueprint.
Conclusió
En aquest tutorial, hem explicat els plans de Flask juntament amb els conceptes de creació de recursos estàtics per a una aplicació de Flask. Hem explorat els avantatges d'utilitzar Flask Blueprint juntament amb els pensaments sobre els recursos de blueprint amb l'ajuda d'un connector Flask anomenat Flask-Bootstrap.
També hem tractat els conceptes de creació de la imatge Docker de l'aplicació de tutoria Flask de mostra. A més, també hem creat dues proves per validar els plans de Flask.
En el nostre següent tutorial, tractarem els patrons que se solen seguir mentre construïm funcions a les aplicacions web mitjançant Flask.
=> Visiteu aquí per aprendre Flask des de zero
Lectura recomanada
- Tutorial API de Flask amb exemple | Ampliant Flask amb API
- Top 31 de les preguntes més populars amb entrevistes de Python Flask amb respostes
- Django Vs Flask Vs Node: quin marc triar
- Patrons de disseny de flascons i bones pràctiques per a aplicacions web
- (Top 10) Les millors plataformes de programari de desenvolupament d'aplicacions del 2021
- Top 51 preguntes i respostes de l’entrevista Bootstrap