【问题标题】:Get url of Flask App without a request无需请求即可获取 Flask App 的 url
【发布时间】:2015-02-13 19:09:57
【问题描述】:

我有一个像下面这样的烧瓶应用程序:

@app.before_first_request
def set_base_url():
  global base_url
  base_url = ?? # something like myflaskapp.com or http://192.168.0.5
  # Initialize some some stuff here...

if __name__ == "__main__":
    app = Flask(__name__)
    app.run(host='0.0.0.0', port=8000)

我需要在任何请求进入之前获取我的应用程序的完整 URL,以便对某些配置选项进行 1 次初始化。最好的方法是什么?

【问题讨论】:

  • 我正在使用 pysaml2 库向我的应用程序添加单点登录功能。该库需要配置,该配置需要基本 url,如下所示:pysaml2.readthedocs.org/en/latest/howto/config.html 在“endpoints”键下。
  • 有什么理由不使用Flask-SSO?我只问这个,因为它让我非常担心在 Flask 中以这种方式添加全局状态。
  • Flask-SSO 使用 Shibboleth 作为身份提供者。我必须使用不同的东西。以上只是展示我的需求的一个例子。我不会添加这样的全局变量。我有一个具有“base_url”属性的对象,但我没有显示代码,尽管上面是一个满足相同需求的更简单的示例。
  • 如果您在 if __name__ == '__main__' 块之前没有定义 app,您将获得一个 NameError

标签: python flask


【解决方案1】:

只需使用app.config 从您的配置中获取SERVER_NAME

if __name__ == "__main__":
    app = Flask(__name__)
    domain = app.config.get('SERVER_NAME', 'some.sensible.default.domain')
    # Do things with `domain` here

【讨论】:

  • 只有在您使用 SERVER_NAME 配置实例时才有效。如果您使用任何其他方法,例如 SERVER_HOST 和 SERVER_PORT 或 werkzeug run_simple,那么这将不起作用。
猜你喜欢
  • 2015-04-20
  • 2013-01-27
  • 2015-11-10
  • 1970-01-01
  • 1970-01-01
  • 2013-06-02
  • 2019-10-20
  • 1970-01-01
  • 2014-07-28
相关资源
最近更新 更多