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
|