Flask: 根据当前环境加载不同配置文件

说明

比如数据库连接信息在测试、正式环境通常对应两套不同的配置。

本文基于 Python 的 Flask 框架实现。

如果想使用 .env 文件来配置不同环境，参考：Python: 通过 .env 文件配置不同环境中的环境变量

创建配置文件

首先需要创建一个基类，这里面包含了项目中所有用到的配置：

Copy
# config/base.py

class Base:
SERVICE_NAME: str = 'service a'
DB_HOST: str = 'base://'

然后再创建测试、正式环境的配置文件，它们都继承自 Base 配置类：

Copy
# config/dev.py

class Dev(Base):
DB_HOST: str = 'dev://'

Copy
# config/prod.py

class Prod(Base):
DB_HOST: str = 'prod://'

创建 init.py

上面已经创建了两套环境的配置，接着我们再在当前目录的 __init__.py 文件中创建一个工具函数，它可以根据当前环境加载不同的配置文件。同时直接声明一个实例（单例），这样其它地方就可以直接通过这个实例来读取配置：

Copy
# config/__init__.py

import os

from config.dev import Dev
from config.prod import Prod

def _get_config():
'''根据当前环境创建一个Config实例'''
env = os.getenv('FLASK_ENV', 'development')
if env == 'development':
return Dev()
else:
return Prod()

current_config = _get_config()

导入配置到 Flask 框架

最后在实例化 Flask 后，导入上面 __init__.py 中声明的 current_config 即可：

Copy
from config import current_config

app = Flask(__name__)
app.config.from_object(current_config)

读取配置

我们可以使用以下方式来获取配置的键值：

Copy
from config import current_config

app = Flask(__name__)
app.config.from_object(current_config)

# 方法一：从 Falsk 中获取
app.config.get('DB_HOST')

# 方法二：从 config/__init__.py 的实例中获取
current_config.DB_HOST

参考