说明#
比如数据库连接信息在测试、正式环境通常对应两套不同的配置。
本文基于 Python 的 Flask 框架实现。
如果想使用 .env 文件来配置不同环境,参考:Python: 通过 .env 文件配置不同环境中的环境变量
创建配置文件#
首先需要创建一个基类,这里面包含了项目中所有用到的配置:
# config/base.py
class Base:
SERVICE_NAME: str = 'service a'
DB_HOST: str = 'base://'
然后再创建测试、正式环境的配置文件,它们都继承自 Base
配置类:
# config/dev.py
class Dev(Base):
DB_HOST: str = 'dev://'
# config/prod.py
class Prod(Base):
DB_HOST: str = 'prod://'
创建 init.py#
上面已经创建了两套环境的配置,接着我们再在当前目录的 __init__.py
文件中创建一个工具函数,它可以根据当前环境加载不同的配置文件。同时直接声明一个实例(单例),这样其它地方就可以直接通过这个实例来读取配置:
# 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
即可:
from config import current_config
app = Flask(__name__)
app.config.from_object(current_config)
读取配置#
我们可以使用以下方式来获取配置的键值:
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