267 votes

Comment diviser une application flask en plusieurs fichiers py ?

Mon application flask est actuellement constituée d'un seul test.py avec plusieurs routes et le fichier main() route définie. Existe-t-il un moyen de créer un test2.py qui contient des routes qui n'ont pas été traitées dans test.py ?

@app.route('/somepath')
def somehandler():
    # Handler code here

Je suis préoccupé par le fait qu'il y a trop de routes en test.py et je voudrais faire en sorte que je puisse exécuter python test.py qui récupérera également les routes sur test.py comme s'il faisait partie du même fichier. Quels changements dois-je apporter dans test.py et/ou inclure dans test2.py pour que ça marche ?

252voto

pixelistik Points 3121

Vous pouvez utiliser la structure habituelle des paquets Python pour diviser votre application en plusieurs modules, voir la documentation de Flask.

Cependant,

Flask utilise un concept de plans pour créer des composants d'application et supporter des modèles communs au sein d'une application ou entre plusieurs applications.

Vous pouvez créer un sous-composant de votre application en tant que Blueprint dans un fichier séparé :

simple_page = Blueprint('simple_page', __name__, template_folder='templates')
@simple_page.route('/<page>')
def show(page):
    # stuff

Et ensuite l'utiliser dans la partie principale :

from yourapplication.simple_page import simple_page

app = Flask(__name__)
app.register_blueprint(simple_page)

Les Blueprints peuvent également regrouper des ressources spécifiques : modèles ou fichiers statiques. Veuillez vous référer au Documents sur Flask pour tous les détails.

127voto

nimeresam Points 510

Vous pouvez utiliser une astuce simple qui consiste à importer les variables de l'application flask depuis le fichier principal dans un autre fichier, par exemple :

test_routes.py

from __main__ import app

@app.route('/test', methods=['GET'])
def test():
    return 'it works!'

et dans vos fichiers principaux, où vous avez déclaré flask app, import test-routes, comme :

app.py

from flask import Flask, request, abort

app = Flask(__name__)

# import declared routes
import test_routes

Ça marche de mon côté.

69voto

Bleiz Points 351

Cette tâche peut être accomplie sans blueprints et importations délicates en utilisant Carte URL centralisée

app.py

import views
from flask import Flask

app = Flask(__name__)

app.add_url_rule('/', view_func=views.index)
app.add_url_rule('/other', view_func=views.other)

if __name__ == '__main__':
    app.run(debug=True, use_reloader=True)

vues.py

from flask import render_template

def index():
    return render_template('index.html')

def other():
    return render_template('other.html')

17voto

Jonathan Prates Points 562

Je voudrais recommander flasque vide sur GitHub.

Il fournit un moyen facile de comprendre Blueprints , des vues multiples et extensions .

16voto

user272933 Points 8

Si vous avez besoin de diviser le blueprint en fichiers séparés, vous pouvez utiliser le snippet :

# app.py

from blueprint_module import blueprint

app = Flask(__name__)
app.register_blueprint(blueprint)

# blueprint_module\__init__.py

from flask import Blueprint

blueprint = Blueprint('my_blueprint', __name__)

from . import page

# blueprint_module\page.py

from . import blueprint

@blueprint.route("/url", methods=['GET'])
def hello():
  return 'hello world'

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