gpt4 book ai didi

python - Flask:应用工厂需要蓝图吗?

转载 作者:太空狗 更新时间:2023-10-29 17:59:26 25 4
gpt4 key购买 nike

我想要多个应用程序工厂(目前:一个用于开发,另一个用于测试)。我想知道实现它们的正确方法是什么。

目前我使用 app 对象来注册 View (通过 @app.route() 装饰器)。我是否需要开始使用蓝图(而不是应用程序)来注册 View ?有什么方法可以在没有蓝包的情况下拥有合适的应用工厂?

最佳答案

从技术上讲,您不需要蓝图,您只需在 create_app 函数上注册每条路线即可。一般来说,这不是一个好主意,这也是蓝图存在的原因。

没有蓝图的例子

def create_app():
app = Flask(__name__)

@app.route('/')
def index():
return render_template('index.html')

return app

如果以这种方式配置,您可以拥有一个应用工厂来同时进行测试和其他任何操作。如果你想根据它是否在测试中加载不同的蓝图,你可以这样做。

from project.config import configurations as c

def create_app(config=None):
" make the app "
app = Flask(__name__)
app.config.from_object(c.get(config, None) or c['default'])

configure_blueprints(app)

return app

def configure_blueprints(app):
" register the blueprints on your app "
if app.testing:
from project.test_bp import bp
app.register_blueprint(bp)
else:
from project.not_test_bp import bp
app.register_blueprint(bp)

那么 project/config.py 可能是这样的:

class DefaultConfig(object):
PROJECT_NAME = 'my project'

class TestingConfig(DefaultConfig):
TESTING = True

class DevConfig(DefaultConfig):
DEBUG = True

configurations = {
'testing': TestingConfig,
'dev': DevConfig,
'default': DefaultConfig
}

为每个蓝图创建一个文件夹,文件夹中的 __init__.py 实例化蓝图。假设一个名为 routes

的蓝图
from flask import Blueprint

bp = Blueprint('routes', __name__)

from project.routes import views

然后在project/routes/views.py中,你可以放你的views。

from project.routes import bp

@bp.route('/')
def index():
return render_template('routes/index.html')

关于python - Flask:应用工厂需要蓝图吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25254022/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com