Flask脚本如何访问当前应用程序



我正试图从Flask Script manager.command.访问当前应用程序实例

这会出错(url_map是flack.app的属性)

@manager.command
def my_function():
    x = app.url_map # this fails, because app is a callable
    print "hi"

这很有效,但我不喜欢在应用程序旁边添加parens。

@manager.command
def my_function():
    x = app().url_map
    print "hi"

调试器显示应用程序是可调用的。这与我创建应用程序实例的方式有关。我遵循这个模式:

def create_app(settings=None, app_name=None, blueprints=None):
    ...lots of stuff...
    app = flask.Flask(app_name)
    ...lots of stuff...
    return app

def create_manager(app):
    manager = Manager(app)

    @manager.command
    def my_function():
        x = app.url_map
        print "hi"

def main():
    manager = create_manager(create_app)
    manager.run()

if __name__ == "__main__":
    main()

烧瓶脚本中的文档说明了Manager(app):上的应用程序参数

app–Flask实例,或可调用的返回Flask实例。

我很乐意在里面放一个可调用的,因为医生说没关系。:-)另外,我也见过其他人这样做。

但现在我有了一个外围命令,我想添加它,它迫使我使用带有parens的应用程序,这闻起来有点不对。我做错了什么?

编辑:我做了一些实验。这绝对是错误的。通过添加parens,应用程序实例将被第二次重新创建。

使用flask.current_app

这项工作:

    import flask
... other stuff ...
    @manager.command
    def my_function():
        x = flask.current_app.url_map
        print "hi"

我把它压得太重了。:-)

相关内容

最新更新