J'ai du mal à comprendre comment diviser une application flask en plusieurs fichiers.
Je crée un service Web et je veux diviser les api en différents fichiers (AccountAPI.py, UploadAPI.py, ...), juste pour ne pas avoir un énorme fichier python.
J'ai lu que vous pouvez faire cela avec Blueprints, mais je ne suis pas tout à fait sûr que cette route soit la bonne pour moi.
En fin de compte, je veux exécuter un fichier python principal et inclure d'autres fichiers afin que, lorsqu'ils s'exécutent, ils soient considérés comme un gros fichier.
Par exemple, si j'ai Main.py et AccountAPI.py, je veux pouvoir le faire:
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 qu'avec cet exemple cela ne fonctionnera évidemment pas, mais est-il possible de faire quelque chose comme ça?
Merci
la source
accountList
une classe dans le même fichier?En utilisant,
Blueprint
vous pouvez ajouter vos itinéraires dans leroutes
répertoire.Structure
__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 souhaitez ajouter un nouveau fichier d'itinéraire, par exemple
accounts.py
, il vous suffit de créer le fichieraccounts.py
dans leroutes
répertoire, tout commeindex.py
etusers.py
, puis de l'importer dans leroutes.__init__.py
fichierfrom .accounts import *
la source
Si vous utilisez des blueprints et que vous souhaitez router / rediriger vers une URL de votre blueprint dans un template que vous utilisez, vous devez utiliser la bonne instruction url_for.
Dans votre cas, si vous souhaitez ouvrir le compte url de votre plan, vous devez l'indiquer 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 générera une erreur.
la source
Une autre façon de faire cela peut être le chargement différé , où vous attacheriez explicitement des fonctions de vue en fonction des besoins.
la source