【问题标题】:How to see if a Flask app is being run on localhost?如何查看 Flask 应用程序是否正在本地主机上运行?
【发布时间】:2013-06-09 07:05:09
【问题描述】:

我希望我的 Flask 应用程序在本地主机上运行和在线托管时具有不同的行为。我如何从烧瓶应用程序中检测到它在本地主机上以及何时部署?

【问题讨论】:

  • 所有网站总是在本地主机上运行。毕竟,他们在主机上。如果通过http://localhost... 访问该站点,您的意思是想要不同的行为吗?
  • 不应该有开发配置文件和部署配置文件吗?

标签: python localhost flask


【解决方案1】:

这是一种方法。关键是将当前根 url flask.request.url_root 与您要匹配的已知 url 值进行比较。

摘自 github repo https://github.com/nueverest/vue_flask

from flask import Flask, request

def is_production():
    """ Determines if app is running on the production server or not.
    Get Current URI.
    Extract root location.
    Compare root location against developer server value 127.0.0.1:5000.
    :return: (bool) True if code is running on the production server, and False otherwise.
    """
    root_url = request.url_root
    developer_url = 'http://127.0.0.1:5000/'
    return root_url != developer_url

【讨论】:

  • 我试过这个,但我从使用“request.url_root”得到这个错误:RuntimeError:在请求上下文之外工作。这通常意味着您尝试使用需要活动 HTTP 请求的功能。有关如何避免此问题的信息,请参阅有关测试的文档。任何想法为什么?谷歌搜索,人们谈论使用 request.url_root 很多,但我没有看到其他人得到这个错误。
【解决方案2】:

您会想查看the configuration handling section of the docs,尤其是the part on dev / production。在这里总结一下,你要做的是:

  • 加载您保留在源代码管理中的基本配置,并为需要具有某些价值的事物提供合理的默认值。任何需要值的东西都应该将值设置为对生产而不是开发有意义的值。
  • 从通过提供环境特定设置(例如数据库 URL)的环境变量发现的路径加载附加配置。

代码示例:

from __future__ import absolute_imports
from flask import Flask
import .config  # This is our default configuration

app = Flask(__name__)

# First, set the default configuration
app.config.from_object(config)

# Then, load the environment-specific information
app.config.from_envvar("MYAPP_CONFIG_PATH")

# Setup routes and then ...

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

另请参阅:Flask.config 的文档

【讨论】:

    猜你喜欢
    • 2021-08-31
    • 2019-01-12
    • 2023-04-11
    • 1970-01-01
    • 2011-06-02
    • 2020-01-24
    • 2019-06-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多