【问题标题】:Flask-Script How to get to the current app?Flask-Script 如何访问当前应用程序?
【发布时间】:2014-09-12 14:46:58
【问题描述】:

我正在尝试从 Flask-Script manager.command 访问当前应用程序实例。

这会报错(url_map 是 flask.app 的一个属性)

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

这可行,但我不喜欢在应用旁边添加括号。

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

docs from flask-scriptManager(app) 上说应用参数:

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

我很乐意在其中放置一个可调用对象,因为文档说没关系。 :-) 另外,我见过其他人这样做。

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

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

【问题讨论】:

    标签: python flask flask-script


    【解决方案1】:

    使用flask.current_app

    这行得通:

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

    我“过时了”它。 :-)

    【讨论】:

      猜你喜欢
      • 2011-01-07
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多