Django 使用JSON文件隐藏秘密数据

示例

当使用诸如Git或SVN的VCS时,某些机密数据绝不能进行版本控制(无论存储库是公共的还是私有的)。

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

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

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

并将其添加到您的忽略列表(.gitignore对于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'),
    },
}

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