J'ai du mal à comprendre comment diviser une application flask en plusieurs fichiers.
Je crée un service Web et je souhaite diviser les API en différents fichiers (AccountAPI.py, UploadAPI.py, ...), juste pour ne pas en avoir un énorme python fichier.
J'ai lu que vous pouvez le faire avec Blueprints, mais je ne suis pas entièrement sûr que l'itinéraire soit le bon pour moi.
En fin de compte, je veux exécuter un fichier principal python et inclure d'autres fichiers afin que, lorsqu'il s'exécute, ils soient considérés comme un gros fichier.
Par exemple, si j'ai Main.py et AccountAPI.py, je veux pouvoir faire ceci:
Main.py:
from flask import Flask
import AccountAPI
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello World!"
if __== "__main__":
app.run()
AccountAPI.py:
@app.route("/account")
def accountList():
return "list of accounts"
Je sais qu'avec cet exemple, cela ne fonctionnera évidemment pas, mais est-il possible de faire quelque chose comme ça?
Merci
Oui, les plans directeurs sont la bonne façon de le faire. Ce que vous essayez de faire peut être réalisé comme ceci:
Main.py
from flask import Flask
from AccountAPI import account_api
app = Flask(__name__)
app.register_blueprint(account_api)
@app.route("/")
def hello():
return "Hello World!"
if __== "__main__":
app.run()
AccountAPI.py
from flask import Blueprint
account_api = Blueprint('account_api', __name__)
@account_api.route("/account")
def accountList():
return "list of accounts"
Si c'est une option, vous pouvez envisager d'utiliser différents préfixes d'URL pour les différentes API/Blueprints afin de les séparer proprement. Cela peut être fait avec une légère modification de ce qui précède register_blueprint
appel:
app.register_blueprint(account_api, url_prefix='/accounts')
Pour plus de documentation, vous pouvez également consulter les documents officiels .
En utilisant Blueprint
, vous pouvez ajouter vos itinéraires dans le répertoire routes
.
app.py
routes
__init__.py
index.py
users.py
from flask import Blueprint
routes = Blueprint('routes', __name__)
from .index import *
from .users import *
from flask import render_template
from . import routes
@routes.route('/')
def index():
return render_template('index.html')
from flask import render_template
from . import routes
@routes.route('/users')
def users():
return render_template('users.html')
from routes import *
app.register_blueprint(routes)
Si vous souhaitez ajouter un nouveau fichier d'itinéraire, dites accounts.py
, il vous suffit de créer le fichier accounts.py
dans le répertoire routes
, tout comme index.py
et users.py
, puis importez-le dans le routes.__init__.py
fichier
from .accounts import *
Si vous utilisez des plans et souhaitez acheminer/rediriger vers une URL de votre plan à l'intérieur d'un modèle que vous utilisez, vous devez utiliser la bonne instruction url_for.
Dans votre cas, si vous souhaitez ouvrir le compte URL de votre modèle, vous devez l'indiquer comme ceci dans votre modèle:
href="{{ url_for('account_api.account') }}"
et pour le principal app cela ressemblerait à ceci:
redirect(url_for('account_api.account'))
Sinon, la bibliothèque werkzeug générera une erreur.
Une autre façon de le faire peut être avec chargement paresseux , où vous attacheriez explicitement des fonctions d'affichage selon les besoins.