摘录自《Two Scopes of Django》一书。
Settings的最佳实践
三个比较high-level的原则是:
- 所有的settings都应该被VCS管理
- settings应该有继承关系,而非在不同项目或文件之间的C/V
- 隐私数据(如secret_key,密码等数据)不应该被VCS管理
settings之间的继承
要用settings目录取代settings.py单文件,该目录下包含:
- base.py: 所有settings都继承自这个配置
- dev.py 或 local.py: 本地开发环境的设置
- test.py: 测试用的设置
- staging.py: 演示用的设置
- production.py: 正式上线的产品端的设置
隐私数据的保存
因此数据有两种保存方式,第一种是用环境变量保存,第二种是用json,xml,config等方式保存在文件中(该文件不可放入VCS)。
使用环境变量保存隐私数据
有多种方式:
- 放入bashrc等环境中;
- 如果使用virtualenv,可以放入venv/bin/activate文件中;
若在某个环境中没有对所需的环境变量进行设置,应该给予适当的错误提醒,具体做法为定义一个函数去取代直接从环境变量中取出数据(sec_xxx = os.environ['xxx']
)1
2
3
4
5
6def get_env_virable(var_name):
try:
return os.environ['xxx']
except KeyError:
error_msg = "Set the {} environment variable".format(var_name)
raise ImproperlyConfigured(error_msg)
requirements的最佳实践
在前文中提到过,settings采用继承关系而设置了不同的配置(dev,test,production等),根据不同的情形,应该也有不同的requirements文件。
最佳实践是讲requirements.txt单文件拆成requirements目录,在该目录下放置诸如:
- base.txt
- dev.txt 或 local.txt
- staging.txt
- production.txt
其中,base.txt是基础配置,其他的首行添加一句-r base.txt
。