說明#
比如資料庫連接資訊在測試、正式環境通常對應兩套不同的配置。
本文基於 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)
# 方法一:從 Flask 中獲取
app.config.get('DB_HOST')
# 方法二:從 config/__init__.py 的實例中獲取
current_config.DB_HOST