Lors de la création d'une application WEB à l'aide de Flask, qui est un framework Web de python, le nombre de lignes dans le fichier Flask a tendance à augmenter, j'ai donc envisagé la division de fichiers. Il semble que le fractionnement de fichiers à l'aide de Brueprint soit courant dans Flask, et cette fois j'ai utilisé Blueprint pour fractionner le fichier.
├── main.py
├── COMP_A
│ └── func_A.py
├── COMP_B
│ └── func_B.py
└── templates
├── COMP_A
│ ├── index_A_1.html
│ └── index_A_2.html
└── COMP_B
├── index_B_1.html
└── index_B_2.html
Le programme principal est main.py. De plus, on suppose qu'il existe des composants A et B. Func_A.py et func_B.py dans chaque composant sont des fichiers qui utilisent Flask.
Dans flask, le fichier html est stocké sous le modèle, mais cette fois, un répertoire pour chaque composant a été préparé sous le modèle et le fichier html a été stocké.
func_A.py
from flask import render_template
from flask import Blueprint
bpa = Blueprint('bpa', __name__, url_prefix='/A')
@bpa.route('/a1')
def app_a1():
return render_template('COMP_A/index_A_1.html')
#return "hello A a1"
@bpa.route('/a2')
def app_a2():
return render_template('COMP_A/index_A_2.html')
#return "hello A a2"
func_B.py
from flask import render_template
from flask import Blueprint
bpb = Blueprint('bpb', __name__, url_prefix='/B')
@bpb.route('/b1')
def app_b1():
return render_template('COMP_B/index_B_1.html')
#return "hello B b1"
@bpb.route('/b2')
def app_b2():
return render_template('COMP_B/index_B_2.html')
#return "hello B b2"
main.py
from flask import Flask
app = Flask(__name__)
from COMP_A.func_A import bpa
from COMP_B.func_B import bpb
@app.route('/')
def index():
return 'Hello main'
app.register_blueprint(bpa)
app.register_blueprint(bpb)
if __name__ == '__main__':
app.debug = True
app.run(host='127.0.0.1',port=60000)
À l'origine, la fonction est enregistrée pour l'application générée par Flask (name), mais dans le cas d'une fonction dans un autre fichier, Brueprint est enregistrée dans l'application à l'aide de register_blueprint. A ce stade, n'oubliez pas d'importer une autre fonction Brueprint au préalable.
Spécifiez les éléments suivants dans l'URL
127.0.0.1:60000/ #main.py index()
127.0.0.1:60000/A/a1 #func_A.py app_a1()
127.0.0.1:60000/A/a2 #func_A.py app_a2()
127.0.0.1:60000/B/b1 #func_B.py app_b1()
127.0.0.1:60000/B/b2 #func_B.py app_b2()
Notez que l'URL est une combinaison du préfixe lorsque Brueprint est spécifié et du chemin lorsque @ xxx.route est défini.
--Fichier fractionné à l'aide du module Il semble y avoir un moyen de diviser le fichier en utilisant flask.module. Pensez à la prochaine fois.
return redirect(url_for('bpb.b2'))
Recommended Posts