如何通过app.run()将任意参数传递给Flask?

时间:2018-01-19 16:59:56

标签: python flask

我想将一个对象传递给一个新发起的烧瓶应用程序。我尝试按照问题解决方案:how-can-i-make-command-line-arguments-visible-to-flask-routes

修改

我想从命令行启动python脚本中获取一个值。

即。

$ run python flaskTest.py -a goo

我没有看到这与我试图复制的问题的解决方案之间的区别。 的修改

因此,我尝试了以下内容:

from flask import Flask

app = Flask(__name__)

print('Passed item: ', app.config.get('foo'))

if __name__ == '__main__':
  from argparse import ArgumentParser

  parser = ArgumentParser()
  parser.add_argument('-a')
  args = parser.parse_args()
  val = args.a

  app.config['foo'] = val
  app.run()

希望得到结果......

'Passed item: Goo'

是否有通过app.run()初始化任意对象的方法?

2 个答案:

答案 0 :(得分:2)

脚本正在从上到下执行,因此您无法打印您尚未拥有的内容。将print语句放在经典的烧瓶工厂函数中允许您首先解析命令行,然后获取您的对象然后使用它:

from flask import Flask

def create_app(foo):
    app = Flask(__name__)
    app.config['foo'] = foo
    print('Passed item: ', app.config['foo'])
    return app

if __name__ == '__main__':
  from argparse import ArgumentParser
  parser = ArgumentParser()
  parser.add_argument('-a')
  args = parser.parse_args()
  foo = args.a
  app = create_app(foo)
  app.run()

答案 1 :(得分:1)

因此,问题是您在定义之前尝试访问值。在你的情况下你需要做这样的事情:

from flask import Flask

app = Flask(__name__)
app.config['foo'] = 'Goo'

print('Passed item: ', app.config['foo'])

if __name__ == '__main__':
  app.run()

如果您在加载某个第三个模块时尝试访问该值,则需要提前在某处定义该值。