如何将视图添加到单独文件中的蓝图
How to add views to a blueprint in separate files
我有一个越来越难以更新其视图的大型应用程序。为了 'fix' 这个,我使用 blueprints 将视图分成几个文件。问题是蓝图也变得非常大,因为每个视图都有很长的文档,每个视图需要不同的验证。
我试过这样 import
:
我有一个包含 Flask 应用程序(导入蓝图)的主文件、一个包含蓝图的文件和一个导入蓝图并在其中配置视图的文件。问题是使用这种方法不会呈现视图,因为流的原因。
主文件,在文件夹的根目录中:
from flask import Flask
from source import test
application = Flask(__name__)
application.register_blueprint(test)
application.run()
蓝图文件,位于根文件夹的子文件夹中:
from flask import Blueprint
test = Blueprint('test', __name__)
视图文件,在与蓝图文件相同的子文件夹中:
from .test import test
@test.route('/home', methods=['GET', 'POST'])
def home():
return 'home'
我也曾尝试将蓝图装饰器添加到声明的函数中,这样视图就会添加到蓝图文件中的蓝图中,但我认为这不是一个好方法或可扩展的方法 - 并且没用 ^ - ^.
我希望在文件中创建蓝图,在其他文件中导入蓝图并向蓝图添加视图,然后导入蓝图并将其添加到 Flask 应用程序中。
在根文件夹中更改主文件:
from flask import Flask
from source.listener import test
application = Flask(__name__)
application.register_blueprint(test)
application.run()
蓝图文件,位于根文件夹的子文件夹中:
listener.py
from flask import Blueprint
from source.view import home
test = Blueprint('test', __name__)
test.add_url_rule('/home', view_func=home,methods=['GET', 'POST'])
视图文件,在与蓝图文件相同的子文件夹中:
from flask import request
def home():
if request.method == 'POST':
user = request.form['name']
return "Welcome "+user
else:
return 'home'
获取请求O/P:
Home
Post 请求 O/P:
Welcome username
您需要导入 blueprint
文件中的 views
内容。
我已经创建了场景并且能够获得view
。此外,我更新了命名约定。
文件夹结构:
.
├── app.py
└── blueprints
├── example_blueprint.py
├── example_views.py
└── __init__.py
app.py
:
from flask import Flask
from blueprints.example_blueprint import bp
app = Flask(__name__)
app.register_blueprint(bp)
blueprints/example_blueprint.py
:
from flask import Blueprint
bp = Blueprint('bp', __name__,
template_folder='templates')
from .example_views import *
blueprints/example_views.py
:
from .example_blueprint import bp
@bp.route('/home', methods=['GET', 'POST'])
def home():
return 'home'
blueprints/__init__.py
: 空白文件
输出:
运行申请:
export FLASK_APP=app.py
export FLASK_ENV=development
flask run
requirements.txt
:
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
参考:
未发现视图模块,因为只导入了蓝图对象。
从您的蓝图组织,尤其是您在主文件中共享的导入,我可以推断出蓝图文件夹中存在 __init__.py导出蓝图对象。
导入该文件中的视图应该会让应用发现在蓝图中注册的视图。
即
blueprint/__init__.py
:
from .test import test
from . import views
我有一个越来越难以更新其视图的大型应用程序。为了 'fix' 这个,我使用 blueprints 将视图分成几个文件。问题是蓝图也变得非常大,因为每个视图都有很长的文档,每个视图需要不同的验证。
我试过这样 import
:
我有一个包含 Flask 应用程序(导入蓝图)的主文件、一个包含蓝图的文件和一个导入蓝图并在其中配置视图的文件。问题是使用这种方法不会呈现视图,因为流的原因。
主文件,在文件夹的根目录中:
from flask import Flask
from source import test
application = Flask(__name__)
application.register_blueprint(test)
application.run()
蓝图文件,位于根文件夹的子文件夹中:
from flask import Blueprint
test = Blueprint('test', __name__)
视图文件,在与蓝图文件相同的子文件夹中:
from .test import test
@test.route('/home', methods=['GET', 'POST'])
def home():
return 'home'
我也曾尝试将蓝图装饰器添加到声明的函数中,这样视图就会添加到蓝图文件中的蓝图中,但我认为这不是一个好方法或可扩展的方法 - 并且没用 ^ - ^.
我希望在文件中创建蓝图,在其他文件中导入蓝图并向蓝图添加视图,然后导入蓝图并将其添加到 Flask 应用程序中。
在根文件夹中更改主文件:
from flask import Flask
from source.listener import test
application = Flask(__name__)
application.register_blueprint(test)
application.run()
蓝图文件,位于根文件夹的子文件夹中:
listener.py
from flask import Blueprint
from source.view import home
test = Blueprint('test', __name__)
test.add_url_rule('/home', view_func=home,methods=['GET', 'POST'])
视图文件,在与蓝图文件相同的子文件夹中:
from flask import request
def home():
if request.method == 'POST':
user = request.form['name']
return "Welcome "+user
else:
return 'home'
获取请求O/P:
Home
Post 请求 O/P:
Welcome username
您需要导入 blueprint
文件中的 views
内容。
我已经创建了场景并且能够获得view
。此外,我更新了命名约定。
文件夹结构:
.
├── app.py
└── blueprints
├── example_blueprint.py
├── example_views.py
└── __init__.py
app.py
:
from flask import Flask
from blueprints.example_blueprint import bp
app = Flask(__name__)
app.register_blueprint(bp)
blueprints/example_blueprint.py
:
from flask import Blueprint
bp = Blueprint('bp', __name__,
template_folder='templates')
from .example_views import *
blueprints/example_views.py
:
from .example_blueprint import bp
@bp.route('/home', methods=['GET', 'POST'])
def home():
return 'home'
blueprints/__init__.py
: 空白文件
输出:
运行申请:
export FLASK_APP=app.py
export FLASK_ENV=development
flask run
requirements.txt
:
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
参考:
未发现视图模块,因为只导入了蓝图对象。
从您的蓝图组织,尤其是您在主文件中共享的导入,我可以推断出蓝图文件夹中存在 __init__.py导出蓝图对象。
导入该文件中的视图应该会让应用发现在蓝图中注册的视图。 即
blueprint/__init__.py
:
from .test import test
from . import views