Flask-Script如何进入当前的应用程序?

时间:2014-09-12 14:46:59

标签: python flask flask-script

我正在尝试从Flask-Script manager.com中访问当前的应用实例。

此错误输出(url_map是flask.app的属性)

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

这样可行,但我不喜欢在app旁边添加parens。

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

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

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()

docs from flask-script说明Manager(app)上的应用参数:

  

app - Flask实例,或者可返回Flask实例。

我很乐意在那里放一个可赎回者,因为文档说它没关系。 :-)而且我见过别人这样做。

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

编辑:我做了一些实验。这绝对是错误的。通过添加parens,app实例将再次重新创建。

1 个答案:

答案 0 :(得分:9)

使用flask.current_app

这有效:

    import flask

... other stuff ...

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

我'过分'了。 : - )