使用 JSON 文件隐藏机密数据

当使用诸如 Git 或 SVN 之类的 VCS 时,有些秘密数据必须永远不会被版本化(无论存储库是公共的还是私有的)。

在这些数据中,你可以找到 SECRET_KEY 设置和数据库密码。

从版本控制中隐藏这些设置的常见做法是在项目的根目录下创建一个文件 secrets.json感谢“ 两个 Django 的 Scoops ):

{
    "SECRET_KEY": "N4HE:AMk:.Ader5354DR453TH8SHTQr",
    "DB_PASSWORD": "v3ry53cr3t"
}

并将其添加到你的忽略列表(.gitignore for git):

*.py[co]
*.sw[po]
*~
/secrets.json

然后将以下函数添加到 settings 模块:

import json
import os
from django.core.exceptions import ImproperlyConfigured

with open(os.path.join(BASE_DIR, 'secrets.json')) as secrets_file:
    secrets = json.load(secrets_file)

def get_secret(setting, secrets=secrets):
    """Get secret setting or fail with ImproperlyConfigured"""
    try:
        return secrets[setting]
    except KeyError:
        raise ImproperlyConfigured("Set the {} setting".format(setting))

然后以这种方式填充设置:

SECRET_KEY = get_secret('SECRET_KEY')
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgres',
        'NAME': 'db_name',
        'USER': 'username',
        'PASSWORD': get_secret('DB_PASSWORD'),
    },
}

致谢: Django 的两个独家:Django 1.8 的最佳实践,Daniel Roy Greenfeld 和 Audrey RoyGreenfeld。版权所有 2015 Two Scoops Press(ISBN 978-0981467344)