gpt4 book ai didi

python - Flask-Script 如何到达当前应用程序?

转载 作者:太空宇宙 更新时间:2023-11-03 12:32:54 24 4
gpt4 key购买 nike

我正在尝试从 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-script说一下 Manager(app) 上的应用程序参数:

app – Flask instance, or callable returning a Flask instance.

我很乐意在其中放置一个可调用对象,因为文档说它没问题。 :-) 另外,我看到其他人也是这样做的。

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

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

最佳答案

使用flask.current_app

这个有效:

    import flask

... other stuff ...

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

我“压倒”了它。 :-)

关于python - Flask-Script 如何到达当前应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25810992/

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