myesn

myEsn2E9

hi
github

Flask: 根據當前環境加載不同配置文件

說明#

比如資料庫連接資訊在測試、正式環境通常對應兩套不同的配置。

本文基於 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

參考#

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。