web-dev-qa-db-fra.com

Comment diviser l'application du flacon en plusieurs fichiers py?

Mon application de flacon consiste actuellement en un seul fichier test.py avec plusieurs routes et la route main() définie. Existe-t-il un moyen de créer un fichier test2.py contenant des itinéraires non gérés 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 dans test.py et souhaite le rendre tel que je puisse exécuter python test.py, qui récupèrera également les routes sur test.py comme si elles faisaient partie du même fichier. Quelles modifications dois-je apporter dans test.py et/ou inclure dans test2.py pour que cela fonctionne?

97
Rolando

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

Cependant,

Flask utilise un concept de plans pour la création de composants d’application et prend en charge les modèles courants au sein d’une application ou entre plusieurs applications.

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

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

Et puis utilisez-le dans la partie principale:

from yourapplication.simple_page import simple_page

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

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

114
pixelistik

Je voudrais recommander flask-empty à GitHub.

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

14
Jonathan Prates

Diviser l'application en modèles est une excellente idée. Toutefois, si cela ne suffit pas et si vous souhaitez ensuite diviser le Blueprint lui-même en plusieurs fichiers py, vous pouvez également utiliser le système d'importation de modules Python standard, puis parcourir toutes les routes importées à partir d'autres fichiers. .

J'ai créé un Gist avec le code pour cela:

https://Gist.github.com/Jaza/61f879f577bc9d06029e

Autant que je sache, c'est la seule façon possible de diviser un plan d'action pour le moment. Il n'est pas possible de créer des "sous-plans" dans Flask, même si un problème reste ouvert avec de nombreuses discussions à ce sujet:

https://github.com/mitsuhiko/flask/issues/593

En outre, même si cela était possible (et qu'il est probablement possible d'utiliser certains des extraits de code de ce fil de discussion), les sous-plans peuvent être trop restrictifs pour votre cas d'utilisation de toute façon - par exemple. si vous ne voulez pas que tous les itinéraires d'un sous-module aient le même sous-préfixe d'URL.

4
Jaza

Vous pouvez diviser comme Django. Voir ci-dessous squelette 

https://github.com/rohitchormale/cookiecutter-flask

0
userx