Flask Config 配置类 API
Config 是一个字典子类,用于管理 Flask 应用的所有配置项。
通过 app.config 访问,支持从多种来源加载配置。
Config 类方法
| 方法 | 签名 | 说明 |
|---|---|---|
| from_pyfile | (filename, silent=False) | 从 Python 文件加载配置。silent=True 时忽略文件不存在错误 |
| from_object | (obj) | 从对象(模块、类、字符串导入路径)加载配置。只加载大写属性 |
| from_envvar | (variable_name, silent=False) | 从环境变量指向的文件加载配置。等价于 from_pyfile(os.environ[var]) |
| from_prefixed_env | (prefix="FLASK", *, loads=json.loads) | 从环境变量加载。读取 FLASK_ 前缀的变量,去掉前缀后设为配置 |
| from_file | (filename, load, silent=False, text=True) | 从任意格式文件加载。load 为解析函数(如 json.load、tomllib.load) |
| from_mapping | (mapping=None, **kwargs) | 从映射对象加载配置。可选**kwargs键值对。只加载大写键 |
| get_namespace | (namespace, lowercase=True, trim_namespace=True) | 获取指定前缀的配置子集。如 get_namespace("DB_") 获取所有数据库配置 |
加载方式对比
| 加载方法 | 适用场景 | 示例 |
|---|---|---|
| from_pyfile | 配置文件为 Python 格式 | app.config.from_pyfile("config.py") |
| from_object | 使用类或模块组织配置,区分环境 | app.config.from_object("myapp.config.ProductionConfig") |
| from_prefixed_env | 12-Factor App,环境变量配置 | app.config.from_prefixed_env() |
| from_file | JSON、TOML 等非 Python 格式 | app.config.from_file("config.json", load=json.load) |
| get_namespace | 提取配置子集传给库的构造函数 | db_config = app.config.get_namespace("DB_") |
配置键命名规则
配置键名 必须全部大写。这是 Flask 的约定,from_object、from_mapping、from_prefixed_env 等方法都会自动忽略小写键。
代码示例
实例
from flask import Flask
app = Flask(__name__)
# 方式1:从 Python 文件加载
app.config.from_pyfile("config.py")
# 方式2:从环境变量加载(读取 FLASK_ 前缀)
app.config.from_prefixed_env()
# 方式3:直接设置
app.config["MY_SETTING"] = "value"
# 方式4:从 JSON 加载
import json
app.config.from_file("config.json", load=json.load)
# 方式5:获取命名空间配置
# 假设有 DB_HOST、DB_PORT、DB_NAME 等配置
db_config = app.config.get_namespace("DB_")
# db_config = {"host": "...", "port": ..., "name": "..."}
app = Flask(__name__)
# 方式1:从 Python 文件加载
app.config.from_pyfile("config.py")
# 方式2:从环境变量加载(读取 FLASK_ 前缀)
app.config.from_prefixed_env()
# 方式3:直接设置
app.config["MY_SETTING"] = "value"
# 方式4:从 JSON 加载
import json
app.config.from_file("config.json", load=json.load)
# 方式5:获取命名空间配置
# 假设有 DB_HOST、DB_PORT、DB_NAME 等配置
db_config = app.config.get_namespace("DB_")
# db_config = {"host": "...", "port": ..., "name": "..."}
