Diviser L'application Python Flask en plusieurs fichiers
J'ai du mal à comprendre comment diviser une application flask en plusieurs fichiers.
Je crée un service web et je veux diviser l'api en différents fichiers (AccountAPI.py, UploadAPI.py, ...), juste pour que je n'ai pas un énorme fichier python.
J'ai lu que vous pouvez le faire avec des plans, mais je ne suis pas tout à fait sûr que la route est la bonne pour moi.
En fin de compte, je veux exécuter un fichier Python principal et inclure d'autres fichiers de sorte que lorsqu'il s'exécute, ils sont considéré comme un gros fichier.
Par exemple si j'ai Main.py et AccountAPI.py je veux être capable de faire ceci:
Main.py:
from flask import Flask
import AccountAPI
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello World!"
if __name__ == "__main__":
app.run()
AccountAPI.py:
@app.route("/account")
def accountList():
return "list of accounts"
Je sais avec cet exemple que cela ne fonctionnera évidemment pas, mais est-il possible de faire quelque chose comme ça?
Merci
4 réponses
Oui, Les plans 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 __name__ == "__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 des préfixes D'URL différents pour les différentes API/Blueprints afin de les séparer proprement. Cela peut être fait avec une légère modification de l'appel register_blueprint
ci-dessus:
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 routes dans le répertoire routes
.
Structure
app.py
routes
__init__.py
index.py
users.py
__init__.py
from flask import Blueprint
routes = Blueprint('routes', __name__)
from .index import *
from .users import *
Index.py
from flask import render_template
from . import routes
@routes.route('/')
def index():
return render_template('index.html')
Users.py
from flask import render_template
from . import routes
@routes.route('/users')
def users():
return render_template('users.html')
App.py
from routes import *
app.register_blueprint(routes)
Si vous voulez ajouter un nouveau fichier de route, disons accounts.py
, il vous suffit de créer le fichier accounts.py
dans le routes
répertoire, tout comme index.py
et users.py
, puis de l'importer dans le routes.__init__.py
fichier
from .accounts import *
Si vous utilisez des blueprints et que vous souhaitez Router / rediriger vers une url de votre blueprint dans un modèle que vous utilisez, vous devez utiliser l'instruction url_for correcte.
Dans votre cas, si vous souhaitez ouvrir l'url du compte de votre plan, vous devez état comme ceci dans votre modèle:
href="{{ url_for('account_api.account') }}"
Et pour l'application principale cela ressemblerait à ceci:
redirect(url_for('account_api.account'))
Sinon la bibliothèque werkzeug lancera une erreur.
Une autre façon de le faire peut être avec chargement paresseux , où vous attacheriez explicitement des fonctions de vue en fonction des besoins.