107 votes

Diviser l'application Python Flask en plusieurs fichiers

J'ai du mal à comprendre comment diviser une application Flask en plusieurs fichiers.

Je suis en train de créer un service web et je veux diviser les api en différents fichiers (AccountAPI.py, UploadAPI.py, ...), pour ne pas avoir un énorme fichier python.

J'ai lu que vous pouviez le faire avec Blueprints, mais je ne suis pas tout à fait sûr que cette voie soit 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és comme un seul 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 qu'avec cet exemple, ça ne marchera évidemment pas, mais est-il possible de faire quelque chose comme ça ?

Merci

181voto

cyroxx Points 1384

Oui, les Blueprints sont la bonne façon de 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 cela est possible, vous pouvez envisager d'utiliser des préfixes d'URL différents pour les différentes API/Blueprints afin de les séparer proprement. Pour ce faire, il suffit de modifier légèrement l'exemple ci-dessus. register_blueprint appeler :

app.register_blueprint(account_api, url_prefix='/accounts')

Pour une documentation complémentaire, vous pouvez également consulter le site les documents officiels .

52voto

MarkZar Points 1056

Utilisation de Blueprint vous pouvez ajouter vos routes dans le routes répertoire.

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')

utilisateurs.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, dites accounts.py il suffit de créer le fichier accounts.py dans le routes tout comme index.py y users.py puis l'importer dans le routes.__init__.py fichier

from .accounts import *

4voto

Thomas Krickl Points 1

Si vous utilisez des blueprints et que vous voulez diriger / 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 le compte url de votre modèle, vous devez l'indiquer de la manière suivante dans votre formulaire d'inscription modèle :

href="{{ url_for('account_api.account') }}"

et pour le principal application ça ressemblerait à ça :

redirect(url_for('account_api.account'))

Sinon, la bibliothèque werkzeug émettra une erreur.

1voto

Bhaskar Points 93

Une autre façon de le faire peut être avec chargement paresseux où vous attacherez explicitement des fonctions de visualisation en fonction des besoins.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X