Flask-Script Как попасть в текущее приложение?
Я пытаюсь получить доступ к текущему экземпляру приложения из 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()
Документы от flask-script говорят о параметрах приложения на Manager(app)
:
app - экземпляр Flask или вызываемый объект, возвращающий экземпляр Flask.
Я чувствую себя комфортно, потому что в документах сказано, что все в порядке.:-) Плюс я видел, как другие так делали.
Но теперь у меня есть эта периферийная команда, которую я хотел бы добавить, и она заставляет меня использовать приложение с паренами, и это пахнет неправильно. Что я делаю неправильно?
РЕДАКТИРОВАТЬ: я сделал несколько экспериментов. Это определенно неправильно. При добавлении паренов экземпляр приложения воссоздается во второй раз.
1 ответ
Использование flask.current_app
Это работает:
import flask
... other stuff ...
@manager.command
def my_function():
x = flask.current_app.url_map
print "hi"
Я "перебил" это.:-)