news 2026/5/16 6:20:11

Flask 的 app.config深度详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Flask 的 app.config深度详解

1. 它是什么

Flask 的app.config可以理解为一个专门存放应用设置的小仓库。这个小仓库是 Flask 应用实例自带的一个属性,外表看起来像一个字典,你可以用操作字典的方式往里面存东西、取东西。

举个生活中的例子:它就像一家餐厅墙上的那块“今日营业参数”白板。上面写着“今日例汤”、“预约电话”、“营业时间”。白板本身不负责做饭,但后厨、服务员、收银员都会看它,根据上面的信息来工作。

2. 它能做什么

  • 统一存放运行参数:比如是否开启调试模式、密钥是什么、数据库地址在哪。所有需要跨模块、跨函数使用的配置信息,都可以放进app.config

  • 灵活切换运行环境:你可以在开发时让调试模式开着,到生产环境时自动关掉,只需要改一个配置键的值。

  • 保护敏感信息:像数据库密码、API密钥这类不能写死在代码里的信息,可以通过app.config从环境变量或外部文件读取,避免泄露。

  • 为扩展提供设置入口:许多 Flask 扩展(如 Flask-SQLAlchemy)都会约定好从app.config里读取自己的专属配置,比如SQLALCHEMY_DATABASE_URI

3. 怎么使用

最直接的方式:像操作字典一样。

python

from flask import Flask app = Flask(__name__) # 存进去 app.config['DEBUG'] = True app.config['SECRET_KEY'] = 'hard-to-guess-string' # 取出来 print(app.config['DEBUG']) # 输出: True

从文件中读取:如果配置项多了,全部写在启动文件里会很乱。可以单独建一个配置文件,比如config.py

python

# config.py DEBUG = True SECRET_KEY = 'hard-to-guess-string'

然后在主程序里加载这个文件。

python

app.config.from_pyfile('config.py')

从类中读取:这种方式在区分开发、测试、生产环境时非常常用。

python

class Config: DEBUG = False SECRET_KEY = 'you-will-never-guess' class DevelopmentConfig(Config): DEBUG = True # 使用 app.config.from_object(DevelopmentConfig)

从环境变量读取:这是生产环境最推荐的方式,密码和密钥不用写在任何文件里。

python

import os app.config['SECRET_KEY'] = os.environ.get('SECRET_KEY')

或者直接让 Flask 从环境变量指向的文件里加载。

python

app.config.from_envvar('PROJECT_CONFIG_FILE')

4. 最佳实践

  • 环境隔离,不要混用:开发环境、测试环境、生产环境的配置务必分开。常见做法是用三个配置类,运行时通过环境变量决定加载哪一个。这就好比餐厅的正餐菜单、下午茶菜单和节假日菜单不会印在同一张纸上。

  • 敏感信息不写死:任何需要保密的内容(密码、token、密钥),都不要写在代码库里。通过环境变量注入,或者存放在不被版本控制系统跟踪的本地配置文件中。

  • 集中管理,避免“到处撒”:配置项应该全部定义在同一个地方(例如config.py),而不是在主路由文件里临时定义几个,在模型文件里又临时定义几个。集中管理的好处是后续改配置不用满项目翻找。

  • 利用实例之间的隔离:如果你用工厂模式创建 Flask 实例,每个实例都有自己独立的app.config,这能避免单元测试时配置相互污染。每个测试用例都可以生成一个全新的应用实例,配置单独调整。

  • 使用get方法避免报错:读取配置时,尽量用app.config.get('SOME_KEY')而不是app.config['SOME_KEY'],前者取不到值只会返回None,不会抛出异常。

5. 和同类技术对比

与 Django 的 settings.py 对比
Django 的配置是一个全局的、模块级别的 Python 文件,导入后全局生效。Flask 的app.config则是绑定在应用实例上的。区别在于:Django 的项目里只能有一套活跃配置;而 Flask 可以在同一个进程里创建多个应用实例,每个实例有自己的配置,互不干扰。相当于 Django 是整个商场统一用一套温度设定,Flask 则是每家店铺可以调自家的空调温度。

与 FastAPI 的依赖注入配置对比
FastAPI 本身没有类似app.config的通用配置容器,通常依赖pydantic-settings这类库,通过依赖注入的方式把配置对象传给需要它的路由函数。Flask 的做法更“广谱”——配置放在应用实例上,任何能拿到appcurrent_app的地方都能直接读取。差别在于:FastAPI 是“按需带”,Flask 是“挂墙上,谁都能看”。

与 Express.js 的 app.set 对比
Node.js 的 Express 框架有app.set(key, value)app.get(key)方法,和 Flask 的app.config思路几乎一致,都是把配置存储在应用实例上。Flask 的优势在于它完全复用了 Python 字典的操作方式,扩展时可以很方便地对配置字典做批量更新、合并等操作。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/3 10:08:47

车载汽车名词

根据搜索结果,你提到的“车机里的ACIC”很可能是指“自适应仪表盘”。不过需要说明的是,它并非指代一个通用、标准的车机(IVI)系统,在行业内也没有一个唯一的、强制的缩写。 关于汽车里的各种ECU(电子控制单…

作者头像 李华
网站建设 2026/5/5 20:34:38

大模型应用开发:简单至上,收藏这份稳定高效指南!

大模型应用开发应遵循“越简单越好”的原则,复杂流程易出错。由于大模型本身存在不稳定性及幻觉等问题,应用开发需尽量简化,减少环节,平衡性能与稳定性。例如,在Agent智能体应用中,可通过workflow工作流机制…

作者头像 李华
网站建设 2026/5/9 17:00:45

从产品小白到独立开发者:我的AI手搓Web网站之旅(收藏版)

在过去的一周,我在完全无技术背景的情况下,通过 AI Coding 手搓了我人生的第一个 Web 端网站,这并非是类似于自媒体“3 分钟 AI 编程”的那种玩具,而是一个真正意义上的产品——在功能和能力上健全,并且 Google 的诊断…

作者头像 李华
网站建设 2026/5/13 21:07:49

Matlab中 appdesigner实现计算器

appdesigner程序如下:aaapp.EditField_2.Value app.EditField3.Value;app.Label_4.Textnum2str(aa);注意: appdesigner中的输入框EditField,有数值和字符串两种,数值框.value 返回的直接是数值,文本框.value返回的是字符串FR&am…

作者头像 李华
网站建设 2026/5/1 18:42:34

《P5445 [APIO2019] 路灯》

题目描述一辆自动驾驶的出租车正在 Innopolis 的街道上行驶。该街道上有 n1 个停车站点,它们将街道划分成了 n 条路段。每一路段都拥有一个路灯。当第 i 个路灯亮起,它将照亮连接第 i 与第 i1 个站点的路段。否则这条路段将是黑暗的。安全起见&#xff0…

作者头像 李华
网站建设 2026/5/13 17:21:39

提示工程架构师实战:用Agentic AI提升prompt的“泛化能力”

提示工程架构师实战:用Agentic AI提升prompt的“泛化能力” 1. 引入与连接 1.1 引人入胜的开场 想象一下,你正站在一个巨大的数字图书馆前,里面堆满了各种知识的书籍。你想要获取关于某个特定主题的信息,但这些书籍摆放得杂乱无章…

作者头像 李华