説明#
例えば、データベース接続情報はテスト環境と本番環境で通常 2 つの異なる設定に対応しています。
この記事は 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 の作成#
上記で 2 つの環境の設定が作成されました。次に、現在のディレクトリの __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