Flask配置不生效主因是配置未被加载,常见于未调用app.config.from_object()、工厂函数中配置位置错误、配置键名大小写/拼写错误、或app.run()参数覆盖配置。

Flask 配置文件不生效,绝大多数情况不是配置写错了,而是配置根本没被 Flask 实例加载——常见于配置对象未正确传入、加载时机错误、或配置键名拼写/大小写不匹配。
config.py 被 import 但 app.config.from_object() 没执行
很多人把配置写在 config.py 里,也 import 进来了,但忘了最关键的一步:显式调用 app.config.from_object() 或 app.config.from_pyfile()。
- 错误写法:
import config后直接创建app = Flask(__name__)→ 配置完全没进 app - 正确顺序:先创建 app,再加载配置,例如:
app.config.from_object('config.DevelopmentConfig') - 如果用字符串路径(如
'config.DevelopmentConfig'),确保config.py在 Python path 中(即能被 import),且模块名和类名拼写完全一致(DevelopmentConfig≠devconfig)
使用工厂函数时,配置加载位置错放到 if __name__ == '__main__': 块内
在 create_app() 工厂模式中,配置必须在函数体内完成;若把 app.config.from_object(...) 写在 if __name__ == '__main__': 下,它只会在直接运行该文件时执行,而通过 flask run 启动时不会触发。
- 工厂函数内必须包含完整配置逻辑,包括
app.config.from_object()、app.config['SECRET_KEY'] = ...等 -
flask run依赖FLASK_APP=app.py和create_app函数签名,它不执行顶层代码块 - 验证是否生效:启动后打印
app.config.get('DEBUG')或访问/debug路由检查行为是否符合预期配置
配置键名大小写错误或用了非法字符
Flask 的配置键是全大写的字符串,且只接受字母、数字、下划线;app.config['my_setting'] 或 app.config['MySetting'] 都不会被识别,必须是 app.config['MY_SETTING']。
立即学习“Python免费学习笔记(深入)”;
- 常见翻车点:
JSON_SORT_KEYS写成json_sort_keys、TEMPLATES_AUTO_RELOAD拼错为TEMPLATE_AUTO_RELOAD(少个 S) - 环境变量方式加载(
app.config.from_prefixed_env())时,变量名也需全大写 + 下划线,且前缀默认为FLASK_,比如FLASK_DEBUG=True - 用
app.config.update(...)传字典时,键同样要大写,否则静默忽略
配置被后续代码覆盖,尤其是 debug=True 或 app.run() 参数
app.run(debug=True, host='0.0.0.0', port=5000) 这类调用会覆盖已加载的配置项,比如 debug=True 会强制开启调试模式,不管 app.config['DEBUG'] 是什么值。
-
debug、host、port是app.run()的参数,不是配置项;它们优先级高于app.config - 开发时应统一用配置控制行为,避免混用:设
app.config['DEBUG'] = True,然后只调用app.run()(无参数) - 生产部署禁用
app.run(),改用 WSGI 服务器(如 Gunicorn),此时所有配置都必须来自app.config
最易被忽略的是:配置加载成功不等于行为生效。比如 TEMPLATES_AUTO_RELOAD = True 只影响模板文件修改后的重载,对 Python 视图文件无效;而 SEND_FILE_MAX_AGE_DEFAULT = 0 必须配合 Nginx 的 expires 设置才能真正禁用静态文件缓存。


















