目的
djangoのsettings.pyにはSECRET_KEYやDBのパスワードなど重要で外部に公開したくないものがあるはず。
そこでそれらを.envファイルに記述し、その.envファイルをgitignoreに追加することで、外部からはそのキーを見れないようにしようと思う。
概要
django-environを使って、.envファイルを読み込む
実装
django-environ公式にあるように実装していく。
pipでdjango-environをインストール
$ pip install django-environ
各ファイルを編集していく
settings.py
settings.py
import environ
# instanceを作成
env = environ.Env(
# 初期値を設定
DEBUG=(bool, False)
)
# .envファイルのパスを指定するためにBASE_DIRをmanage.pyのある階層に指定
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# manage.pyのある階層にある.envを読み込む
environ.Env.read_env(os.path.join(BASE_DIR, '.env'))
# .envのSECRET_KEYをSECRET_KEYに代入
SECRET_KEY = env('SECRET_KEY')
.envファイル
SECRET_KEY = 'cecnecdeeincaliohejfioq3'
こうすることでsettings.pyに
SECRET_KEY = 'cecnecdeeincaliohejfioq3'
が記述されたことになる。
ここでローカルサーバーを立ち上げて問題ないか確認してみる。
$ python manage.py runserver
問題発生
django.core.exceptions.ImproperlyConfigured: Set the SECRET_KEY environment variable
!?!?!?!?何で!?
SECRET_KEY = 'cecnecdeeincaliohejfioq3'
このように = の周りにスペースを入れたくなるがこのスペースが入るとSECRET_KEYは読み込まれない。
そこで
SECRET_KEY='cecnecdeeincaliohejfioq3'
とすることで問題なくSECRET_KEYが読み込まれる。
ここで実は数時間詰まっていた。
参考文献