47
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

DjangoのSECRET_KEYをバージョン管理対象外にする

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の記載をこのファイルに追加し、

local_settings.py
SECRET_KEY = '01234567890123456789012345678901234567890123456789'

settings.pyの末尾に以下の様に追記してlocal_settings.pyの記載をインポートする。

settings.py
...
try:
    from .local_settings import *
except ImportError:
    pass

(参考)Djangoのsettings.py周りのメモ

インポートするファイルの名前は何でも良いはずだが、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したときに実行することにする。

generate_secretkey_setting.py
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

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
47
Help us understand the problem. What are the problem?