【Django备忘录】使用django-environ在不同文件中管理机密信息
首先
迄今为止,Qiita只是被用于浏览而没有写文章的经历。但为了备忘录,并且避免自己的认知错误所带来的遭遇(?),我决定一试身手,写一篇文章。希望可以对遇到类似问题的人提供帮助。
本次的《Django备忘录系列》,将介绍如何管理难以通过Git提交的机密信息,包括SECRET_KEY等,通过将其存储在另一个文件中。
以下の実装はGithubで公開されています。この記事では、ディレクトリの構成は公開されたリポジトリに基づいています。
機密情報是指保密的資訊。
我认为,不仅仅是本文提到的Django项目,一般的项目中往往都包含着多多少少的机密信息。
在Django项目中,以下的信息往往被视为机密信息,不是吗?
-
- 密钥
-
- 数据库主机名,用户名,密码等
- 外部服务的API密钥等
如果不小心在GitHub等平台上公开这些信息,可能会导致信息泄漏的不法访问,或者使我们所签约的外部服务被第三方擅自使用,从而导致惊人的费用。
在开发环境、演示环境和生产环境中,通常需要将这些信息分别设置为不同的值。(例如:支付服务Stripe的测试密钥和生产密钥)
django-environ是一种能够将这些机密信息从Django项目的实现中分离出来,以单独的文件进行管理,并能够轻松实现环境值的切换。
尝试使用Django-Environ
关于如何创建Django项目,只要查找前人的智慧,就会有很多选项,所以暂时省略不提。如果有灵感,我将自己撰写。
首先要安装才能开始,所以让我们用pip快速安装吧。
pip3 install django-environ
一旦安装完成后,接下来我们需要将settings.py中包含的机密信息写入到另一个文件中。
我们在项目的根目录(sample_project/)下创建一个名为.env的文件。
出於說明的考慮,我們將.env文件公開在GitHub上,但實際上絕對不要公開。請務必在.gitignore中加上這一項,絕對不要公開.env文件。
下面是一个示例.env文件的内容。
DEBUG=on
SECRET_KEY=django-insecure-_fm3))r6!#)^wxpv2r1*&gzj=wnhis!nb-u26fjlphj$e(a(%4
ALLOWED_HOSTS=localhost
将希望以另一个文件进行管理的机密信息写入.env文件后,最后编辑settings.py。
导入django-environ,并将settings.py中所述的各种机密信息替换为.env文件中引用的值。
# django-environを用いた環境変数の秘匿サンプル
# django-environをインポート
import os
import environ
from pathlib import Path
# envオブジェクトを作成
env = environ.Env(
DEBUG = (bool, False)
)
# sample_project/.envを読み込み
# CAUTION: sample_project/.envは、実際のプロジェクトではGit管理内容に含めない!
BASE_DIR = Path(__file__).resolve().parent.parent
environ.Env.read_env(os.path.join(BASE_DIR, '.env'))
# 読み込んだ環境変数を設定
SECRET_KEY = env('SECRET_KEY')
DEBUG = env('DEBUG')
ALLOWED_HOSTS = env.list('ALLOWED_HOSTS')
尝试启动服务器,如果成功启动,则设置完成。恭喜!
按照不同的环境切换设定值。
只需根据不同的环境更改.env文件的内容。由于不纳入Git管理,因此拉取代码不会覆盖.env的内容。太棒了!
得出结论
-
- 機密情報はGitに公開してはいけない
-
- 機密情報はGitに公開してはいけない
-
- 機密情報はGitに公開してはいけない
-
- 機密情報はGitに公開してはいけない
-
- 機密情報はGitに公開してはいけない
- 機密情報はGitに公開してはいけない