Python-decoupleを使ってDjangoの設定ファイルを管理する


なぜ必要なのか

基本的に多くの導入記事では設定ファイルに各種設定をハードコーディングしているが、いわゆるSECRET_KEYや環境変数などを直接ハードコーディングするのは運用的、セキュリティ的な観点などから実用的に考えるとよろしくない。

なので設定を隔離できるようなモジュールを導入し、別に管理してそこから読み込むというのがハードコーディングを避ける手段となる。
PythonではPython-decoupleというモジュールがあるため、Djangoでのsettings.pyを例に使ってみようと思う。

なお、今回作成したプロジェクトはこちらから見る事ができるので気になる方はどうぞ。

導入

インストールし、

$ pip install python-decouple
$ django-admin startproject decoupleproject

プロジェクトを作成。

既にPython-decoupleをインストールしてあるため、manage.pyと同じディレクトリに.envファイルを作成します。

そして、ここに各種設定ファイルでハードコーディングしたくない情報を.envに書き、sttings.pyでインポートすれば環境ごとに切り替え流事ができるので非常に有用です。

例えば、今回は

settings.py
from decouple import config


# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))


# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/3.0/howto/deployment/checklist/

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = config('SECRET_KEY')

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = conig('DEBUG' default=False,cost=bool)

ALLOWED_HOSTS = config('ALLOWED_HOSTS',cost=Csv())
SECRET_KEY = '6@gw!zj8jjwjr%da0g=&1dzmhjbi3p%r@6157##n0oix#&ybv2'
DEBUG = True
ALLOWED_HOSTS = []

こうした書き方をすることによって、外部からは知られたくない情報の分離が出来ます。

他にもデータベースの接続情報を隠すようなモジュールもあるので近いうちに紹介したいと思います。
お疲れ様でした。