Flask 的配置到底按什么顺序生效?同一个键被多次设置谁说了算?环境变量里的 false 会变成什么?这篇依次加载六种来源并观察同一个键的变化。
默认键数 29 | DEBUG = False | SECRET_KEY = None | 自定义键 PAGE_SIZE 是否存在: False
上一篇:模板中执行函数的性能问题;下一篇:from_object()、from_envvar()、from_pyfile()。
(开始) PAGE_SIZE=None ENV_NAME=None
from_object("defaults_cfg") PAGE_SIZE=10 ENV_NAME=from-defaults-file
from_pyfile("prod.py") PAGE_SIZE=50 ENV_NAME=from-prod-file
from_file("cfg.json", load=json.load) PAGE_SIZE=7 ENV_NAME=from-json
from_prefixed_env()(FLASK_PAGE_SIZE=200) PAGE_SIZE=200 ENV_NAME=from-env
config.update(PAGE_SIZE=1) PAGE_SIZE=1 ENV_NAME=from-env
config["PAGE_SIZE"] = 2 PAGE_SIZE=2 ENV_NAME=from-env
结论:没有「优先级表」,就是代码执行的先后顺序;最后一次写入的赢。lower_case 在 config 里吗: False | 加载进来的自定义键: ['ENV_NAME', 'FEATURES', 'PAGE_SIZE']
instance_path = <项目>/instance | config.root_path = <项目>/instance
from_pyfile("local.py") 之后 PAGE_SIZE = 99 | SECRET_KEY = instance-secret
不开 instance_relative_config 时 config.root_path = <项目> (相对路径相对应用的 root_path) FLASK_N → config["N"] = 5 (int)
FLASK_F → config["F"] = 1.5 (float)
FLASK_B1 → config["B1"] = True (bool)
FLASK_B2 → config["B2"] = False (bool)
FLASK_NONE → config["NONE"] = None (NoneType)
FLASK_LIST → config["LIST"] = [1, 2, 3] (list)
FLASK_TXT → config["TXT"] = 'hello' (str)
FLASK_QUOTED → config["QUOTED"] = 'hello' (str)
FLASK_EMPTY → config["EMPTY"] = '' (str)
FLASK_DB → config["DB"] = {'HOST': 'localhost', 'PORT': 5432} (dict)
FLASK_X → config["X"] = '(不存在)' (str)
自定义前缀 from_prefixed_env("MYAPP"): 9 get_namespace("SMTP_") → {'host': 'h', 'port': 25, 'use_tls': True}
get_namespace("SMTP_", lowercase=False) → {'HOST': 'h', 'PORT': 25, 'USE_TLS': True}