【django-environ】機密情報を.envファイルで管理する方法

Djangoを用いてアプリケーションを作成する際に、settings.pyなどに機密情報(パスワードやメールアドレスなど)を直接記述してしまっていませんか??セキュリティ上の観点から、設定フィル内にハードコーディングするのは好ましくありません。

本記事では、djangoアプリケーションにて機密情報などを環境変数として外部ファイルから読み込む方法をご紹介します。

内容

・環境変数として機密情報を扱う方法

目次

方法

ライブラリのインストール

djangoアプリケーションで簡単に環境変数を扱うことができる django-environ というライブラリをインストールします。

(venv)$ pip install django-environ

アプリケーションをデプロイする場合などは、requirements.txt を忘れずに更新しておきましょう。

(venv)$ pip freeze > requirements.txt

.env の作成

プロジェクトのルートディレクトリ(manage.pyがあるとこ)に「.env」というファイルを作成しましょう。この中に環境変数を記述します。

記述方法はこんな感じです。

# pythonと同様「#」でコメントアウトできます

# 文字列として記述
SECRET_KEY=mykey
SECRET_KEY="my key"   # 空白がある場合

# 真偽値
DEBUG=False

# リスト
DB_USERS=taro,sho,yukari

.env の読み取り

settings.py側で環境変数を読み取ります。

import os
import environ
from pathlib import Path

# プロジェクトのルートディレクトリを取得
BASE_DIR = Path(__file__).resolve().parent.parent

# .envファイルを読み込む
env = environ.Env()
env.read_env(os.path.join(BASE_DIR, '.env'))

# .envファイルから各環境変数を読み込む
SECRET_KEY = env('SECRET_KEY')
DEBUG = env.bool('DEBUG')
DB_USERS = env.list('DB_USERS')

こんな感じで簡単に環境変数を分離することができます。

ここで注意なのですが、マシンに設定されている環境変数が優先されて読み込まれてしまうということです。「.env」から読み込んでいるのも関わらず、異なる値が読み込まれてしまう場合はマシンの環境変数で既に設定されている場合があります。

このことに気づかず1時間くらい右往左往したことがあります、、、。

適宜下記のコマンドで対応しましょう。

// マシンに設定している環境変数一覧を表示
$ env

// 環境変数のリセット
unset [環境変数名]

GitHubでバージョン管理しないように

GitHubでバージョン管理する必要はないので、.envファイルと同じディレクトリに「.gitignore」というファイルを作成し、下記のように記述しましょう。

.env

まとめ

django-environを使用して、.envファイルから環境変数を読み込む設定をご紹介しました。機密情報を直接ハードコーディングすることは避けましょう!

ご覧いただきありがとうございました!

案件、ありますか?

「メインの仕事があるけれど、週1、2日だけできる仕事ないかな、、、」

「ある程度スキルが身に付いてはきたけど、そのスキルを活用できる場が欲しい」

なんて悩みが以前はありました。

自分で仕事を探しに行くのも大事ですが、蛇の道は蛇。その道の人に頼むことで、自分だけでは見つからないような案件に携わることができます。

IT PRO パートナーズでは、簡単に無料でアカウントを登録でき、さらにはエージェントさんに希望の働き方・案件の種類を提示することでお仕事を紹介してくれます!

登録自体も非常に簡単で、「エージェントさんとの面談を希望する」という欄にチェックをするだけで、エージェントさんから直接連絡をいただくことができます。

驚くほど簡単で正直拍子抜けしてしまいました笑

もしお仕事探しに困っておりましたら、一度登録し案件を眺めてみることをおすすめします!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

勤めていた設計会社を退社し、フリーランスとして活動しています
また、趣味で主にpyhonを用いて機械学習を行なっています!
現在競艇の予測モデルの開発中です。

コメント

コメントする

目次