news 2026/4/15 14:37:08

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/4/15 11:39:31

【回眸】系统读书笔记(四)

目录 前言 复盘:戒网 ——笔记节选2 后记 前言 这绝对是博主开账号以来更新的最快的一个系列,许愿后面不鸽不断更,早日完结。 前几天整理房间的时候看到很早以前的日记本,虽然说是日记本,实际上只断断续续写了几天…

作者头像 李华
网站建设 2026/4/15 11:39:53

ansible的filesystem模块--tmp

filesystem模块分区格式化模块参数解释dev块设备名称(磁盘路径)fstype分区格式resizefs将文系统系统大小增加到磁盘的大小示例代码 - name: 创建xfs文件系统filesystem:fstype: xfsdev: /dev/vdb1

作者头像 李华
网站建设 2026/4/15 11:39:51

小白程序员必备:收藏这份2026年大模型转行学习指南,轻松入门AI新赛道!大模型应用开发,2026程序员如何转行大模型?

2025年AI行业因DeepSeek等大模型技术发展迎来热潮,为程序员提供转行良机。文章分析AI行业现状与趋势,指出技术门槛降低、市场需求旺盛、持续学习机会和高薪回报是转行优势。介绍了模型研发、算法、数据科学等热门岗位及其要求,并提供了系统学…

作者头像 李华
网站建设 2026/4/15 11:42:19

HPE助力2026年冬奥会网络基础设施建设

HPE在确保2026年冬奥会网络连接方面发挥了重要作用,这次部署不仅展示了其自身的技术和服务能力,还整合了收购的Juniper Networks的技术方案,这是首次在大型赛事中同时运用两家公司的技术。Milano Cortina 2026冬奥会覆盖面积超过22,000平方公…

作者头像 李华
网站建设 2026/4/14 22:59:16

【开题答辩全过程】以 基于Java的网吧计费管理系统设计与实现为例,包含答辩的问题和答案

个人简介一名14年经验的资深毕设内行人,语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…

作者头像 李华