使用环境变量管理跨服务器的设置

使用环境变量是一种广泛使用的方法,可根据环境设置应用程序的配置,如 The Twelve-Factor App 中所述

由于配置可能会在部署环境之间发生变化,因此这是一种非常有趣的方式来修改配置,而无需深入挖掘应用程序的源代码,以及将秘密保存在应用程序文件和源代码存储库之外。

在 Django 中,主要设置位于项目文件夹中的 settings.py。由于它是一个简单的 Python 文件,你可以使用标准库中的 Python 的 os 模块来访问环境(甚至具有适当的默认值)。

settings.py

import os

SECRET_KEY = os.environ.get('APP_SECRET_KEY', 'unsafe-secret-key')

DEBUG = bool(os.environ.get('DJANGO_DEBUG', True) == 'False')

ALLOWED_HOSTS = os.environ.get('DJANGO_ALLOWED_HOSTS', '').split()

DATABASES = {
    'default': {
        'ENGINE': os.environ.get('APP_DB_ENGINE', 'django.db.backends.sqlite3'),
        'NAME': os.environ.get('DB_NAME', 'db.sqlite'),    
        'USER': os.environ.get('DB_USER', ''),
        'PASSWORD': os.environ.get('DB_PASSWORD', ''),
        'HOST': os.environ.get('DB_HOST', None),
        'PORT': os.environ.get('DB_PORT', None),
        'CONN_MAX_AGE': 600,
    }
}

使用 Django,你可以更改数据库技术,以便在开发计算机上使用 sqlite3(这应该是提交源控制系统的理想默认值)。虽然这是可能的,但不建议:

支持服务(例如应用程序的数据库,排队系统或缓存)是 dev / prod 奇偶校验非常重要的一个领域。 ( 十二因素应用程序 - 开发/生产平价

要使用 DATABASE_URL 参数进行数据库连接,请查看相关示例