Django settings 中存有很多私密信息,如 database url, password, secret key, allowed hosts 等,我们还可能有 Debug / Deploy 两套不同的运行环境,python-decouple 可以让这些环境变量与代码分离。
Usage
例如 settings.py
内容如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| import os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) SECRET_KEY = '3izb^ryglj(bvrjb2_y1fZvcnbky#358_l6-nn#i8fkug4mmz!' DEBUG = True DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'HELLO_DJANGO', 'USER': 'U_HELLO', 'PASSWORD': 'hA8(scA@!fg3*sc&xaGh&6%-l<._&xCf', 'HOST': '127.0.0.1', 'PORT': '', } }
|
在项目根目录下创建一个 .env
文件,内容如下
1 2 3 4 5 6
| SECRET_KEY=3izb^ryglj(bvrjb2_y1fZvcnbky#358_l6-nn#i8fkug4mmz! DEBUG=True DB_NAME=HELLO_DJANGO DB_USER=U_HELLO DB_PASSWORD=hA8(scA@!fg3*sc&xaGh&6%-l<._&xCf DB_HOST=127.0.0.1
|
将 .env
加入到 .gitignore
,修改 settings.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| import os from decouple import config
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) SECRET_KEY = config('SECRET_KEY') DEBUG = config('DEBUG', cast=bool) DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': config('DB_NAME'), 'USER': config('DB_USER'), 'PASSWORD': config('DB_PASSWORD'), 'HOST': config('DB_HOST'), 'PORT': '', } }
|
类型转换
.env
内容
1 2 3
| DEBUG=True EMAIL_PORT=25 ALLOWED_HOSTS=.localhost, .herokuapp.com
|
settings.py
内容
1 2 3 4 5
| from decouple import config, Csv
DEBUG = config('DEBUG', default=True, cast=bool) EMAIL_PORT = config('EMAIL_PORT', cast=int) ALLOWED_HOSTS = config('ALLOWED_HOSTS', cast=Csv())
|
也可用外部环境变量
1
| DEBUG=False python manage.py
|