J'ai une énorme application qui devenait difficile pour mettre à jour ses vues. Pour résoudre ce problème, j'ai séparé les vues en quelques fichiers, en utilisant blueprints a >. Le problème est que les plans deviennent également très volumineux, à cause de la longue documentation de chaque vue et des différentes vérifications que chaque vue nécessite. J'avais essayé de faire une Où j'ai un fichier principal contenant l'application Flask ( qui importe le plan directeur), un fichier qui contient le plan directeur et un fichier qui importe le plan directeur et configure les vues qu'il contient. Le problème est qu'avec cette approche les vues ne sont pas rendues, pour des raisons de flux. Le fichier principal, à la racine d'un dossier: Le fichier de plan, dans un sous-dossier du dossier racine: Le fichier de vue, dans le même sous-dossier que le fichier de plan: import comme ceci:
from .test import test
@test.route('/home', methods=['GET', 'POST'])
def home():
return 'home'
from flask import Blueprint
test = Blueprint('test', __name__)
from flask import Flask
from source import test
application = Flask(__name__)
application.register_blueprint(test)
application.run()
3 Réponses :
Dans le dossier racine, changez le fichier principal:
Welcome username
Le fichier blueprint, dans un sous-dossier du dossier racine:
listener.py
Home
Le fichier de vue, dans le même sous-dossier que le fichier de plan:
from flask import request
def home():
if request.method == 'POST':
user = request.form['name']
return "Welcome "+user
else:
return 'home'
Get Request O / P:
from flask import Blueprint
from source.view import home
test = Blueprint('test', __name__)
test.add_url_rule('/home', view_func=home,methods=['GET', 'POST'])
Post Request O / P:
from flask import Flask from source.listener import test application = Flask(__name__) application.register_blueprint(test) application.run()
Vous devez importer le contenu des vues dans le fichier blueprint .
J'ai créé le scénario et je suis en mesure d'obtenir la vue . De plus, j'ai mis à jour la convention de dénomination.
Structure des dossiers:
Click==7.0 Flask==1.0.3 itsdangerous==1.1.0 Jinja2==2.10.1 MarkupSafe==1.1.1 pkg-resources==0.0.0 Werkzeug==0.15.4
app.py :
XXX
blueprints / example_blueprint.py :
export FLASK_APP=app.py export FLASK_ENV=development flask run
blueprints / example_views.py :
from .example_blueprint import bp
@bp.route('/home', methods=['GET', 'POST'])
def home():
return 'home'
blueprints / __ init__.py : Fichier vide
Sortie:
Exécution de l'application:
from flask import Blueprint
bp = Blueprint('bp', __name__,
template_folder='templates')
from .example_views import *
requirements.txt :
from flask import Flask from blueprints.example_blueprint import bp app = Flask(__name__) app.register_blueprint(bp)
Référence:
Le module de vue n'est pas découvert car seul l'objet Blueprint est importé.
De l'organisation de votre Blueprint et en particulier de l'importation que vous avez partagée dans votre fichier principal, je peux déduire l'existence d'un __init__.py dans le dossier blueprint qui exporte l'objet blueprint.
L'importation des vues dans ce fichier devrait permettre à l'application de découvrir les vues enregistrées dans le blueprint. c'est-à-dire
blueprint/__init__.py:
from .test import test from . import views
Pouvez-vous partager la structure des dossiers?