#SECRET_KEY
Djangoで開発を始めるときに作成されるsettings.py
にはランダムな50文字からなるSECRET_KEY
が含まれるが、この値は秘密するようにと警告されている。
このためSECRET_KEYをGitのバージョン管理の対象外にしようと思い、その時の方法をメモする。
#local_settings.py
settings.py
はバージョン管理対象にしたいので、SECRET_KEY
の記載は削除する。削除しただけではDjangoが動作しないので、別のファイルに記載してsettings.py
からインポートする。
local_settings.py
というファイルを作成してsettings.py
から削除したSECRET_KEY
の記載をこのファイルに追加し、
SECRET_KEY = '01234567890123456789012345678901234567890123456789'
settings.py
の末尾に以下の様に追記してlocal_settings.py
の記載をインポートする。
...
try:
from .local_settings import *
except ImportError:
pass
インポートするファイルの名前は何でも良いはずだが、python用の.gitignore
に記載があるので、local_settings.py
がオーソドックスなのだと思う。
#get_random_secret_key()
local_settings.py
はバージョン管理対象外としたため、開発中のプロジェクトを別の開発環境(PCなど)でgit clone
した場合、当然このファイルはダウンロードされず、SECRET_KEY
が設定されない。
このため、SECRET_KEY
を生成するスクリプトgenerate_secretkey_setting.py
を用意して、最初にプロジェクトをgit clone
したときに実行することにする。
from django.core.management.utils import get_random_secret_key
secret_key = get_random_secret_key()
text = 'SECRET_KEY = \'{0}\''.format(secret_key)
print(text)
git clone
した後、settings.py
と同じディレクトリで
$ python generate_secretkey_setting.py > local_settings.py
と実行する。(Djangoはインストールされている前提)
get_random_secret_key()
はDjangoで開発を始めるときにsetting.py
内のSECRET_KEY
を生成する関数。
スクリプトはこの関数が生成する50文字の値をSECRET_KEY
に代入する文字列を出力するので、これをlocal_settings.py
に書き込む。
local_settings.py
ではなく、generate_secretkey_setting.py
を、開発中のDjangoプロジェクトと一緒にバージョン管理の対象とすれば、他の開発環境と共有できる。
#まとめ
以下のことをして、DjangoのSECRET_KEY
をバージョン管理対象外にすることができた。
1. SECRET_KEY
をバージョン管理の対象外であるlocal_settings.py
に記載する。
2. SECRET_KEY
を生成するスプリプトを用意する。(他の環境で開発を始めるときに困らない様に)
動作は以下のバージョンで確認した
- Python 3.6.5
- Django 2.1