Flask 使用工厂模式访问烧瓶中的@App decorator

Flask 使用工厂模式访问烧瓶中的@App decorator,flask,factory-pattern,Flask,Factory Pattern,如何使用装饰器的工厂模式访问应用程序对象? 我知道当前的_应用程序存在,但我不能将其用于装饰 在使用工厂模式之前(例如,在函数中包装应用程序初始化和蓝图注册),我可以做如下操作: @app.errorhandler(500) @app.errorhandler(502) def generic_errror_handler(error): # Some logic here return render_template('error.html', error=errror) 但

如何使用装饰器的工厂模式访问应用程序对象? 我知道当前的_应用程序存在,但我不能将其用于装饰

在使用工厂模式之前(例如,在函数中包装应用程序初始化和蓝图注册),我可以做如下操作:

@app.errorhandler(500)
@app.errorhandler(502)
def generic_errror_handler(error):
    # Some logic here
    return render_template('error.html', error=errror)
但是在使用工厂模式之后,我不知道如何以一种好的方式实现这一点。是否在create_app()函数中初始化它们

def create_app():
    app = Flask(__name__)
    initialize_extensions(app)
    register_blueprints(app)
    return app

您可以在create_应用程序定义中初始化处理程序,例如

def create_app():
    app = Flask(__name__)
    initialize_extensions(app)
    register_blueprints(app)

    @app.errorhandler(500)
    @app.errorhandler(502)
    def generic_errror_handler(error):
        # Some logic here
        return render_template('error.html', error=errror)

    return app
或者,创建一个单独的Python文件,比如error_handlers.py(示例取自):

并从
create\u app
中调用
register\u handlers

def create_app():
    app = Flask(__name__)
    initialize_extensions(app)
    register_blueprints(app)

    register_handlers(app)

    return app

您也可以在模块上定义函数而不使用decorator,只需在创建应用程序后对其进行修饰即可。e、 g.
应用程序错误文件夹(404)(未找到页面)
等。
def create_app():
    app = Flask(__name__)
    initialize_extensions(app)
    register_blueprints(app)

    register_handlers(app)

    return app