Python的Django框架中settings文件的部署建议


Posted in Python onMay 30, 2015

django在一个项目的目录结构划分方面缺乏必要的规范,因此不同人的项目组织形式也千奇百怪,而且也很难说谁的做法就比较好。我根据自己的项目组织习惯,发布了一个项目dj-scaffold。

前些天在reddit上为我的项目dj-scaffold打了个“广告”(见:http://redd.it/kw5d4)。不想评价甚糟,甚至差点被打成负分。其中更也人将这个项目说的一文不值。面对负面声音虽然会有些不爽,但其中的建设性意见还是需要听取的,至于那些纯属个人偏好部分就自动过滤了。

在谈及settings文件如何组织时,coderanger建议参考The Best (and Worst) of Django中的做法。文中的主要观点是开发环境和生产环境的配置都需要放到VCS中进行版本控制。参考文中的做法,我对settings模块做了部分调整。注:代码 https://github.com/vicalloy/dj-scaffold/tree/master/dj_scaffold/conf/prj/sites/settings
local_settings的弊病

为将项目的默认配置和本地配置区分开,最常用的做法是增加一个local_settings.py文件,并在settings文件的最后对该文件进行import。

try:
 from local_settings import *
except:
 pass

由此引发的问题是你不能对local_settings.py进行版本控制,部署环境的配置万一丢失将难以找回。
解决方案

针对该问题,建议的解决方案如下
合理的配置文件组织方式

|~settings/

| |-__init__.py

| |-base.py   #默认配置信息

| |-dev.py    #开发环境的配置

| |-local.sample    #本地的扩展配置在dev和production的最后进行import

| |-pre.sample    #设置当前使用的配置为生产环境还是开发环境

| `-production.py    #生产环境的配置

 

使用方式

<strong>DJANGO_SETTINGS_MODULE</strong>

django的admin脚本提供了settings参数用于指定当前使用的配置文件

django-admin.py shell --settings=settings.dev

在wsgi脚本中则可直接设置需要使用的settings

deploy.wsgi
os.environ['DJANGO_SETTINGS_MODULE'] = settings.production

简化参数

当然,如果每次使用django-admin.py的时候都要带上settings参数还是非常恼人,所以推荐的做法是在pre.py中配置自己所需要使用的配置文件。

SETTINGS = 'production' #dev
Python 相关文章推荐
Python解析网页源代码中的115网盘链接实例
Sep 30 Python
python使用BeautifulSoup分页网页中超链接的方法
Apr 04 Python
python 爬虫出现403禁止访问错误详解
Mar 11 Python
利用Python读取文件的四种不同方法比对
May 18 Python
python装饰器实例大详解
Oct 25 Python
Python 判断 有向图 是否有环的实例讲解
Feb 01 Python
python 把文件中的每一行以数组的元素放入数组中的方法
Apr 29 Python
python抽取指定url页面的title方法
May 11 Python
python中ASCII码和字符的转换方法
Jul 09 Python
selenium+python自动化测试之鼠标和键盘事件
Jan 23 Python
python+mysql实现学生信息查询系统
Feb 21 Python
Python HTTP下载文件并显示下载进度条功能的实现
Apr 02 Python
Python的Django中django-userena组件的简单使用教程
May 30 #Python
在SAE上部署Python的Django框架的一些问题汇总
May 30 #Python
python实现比较两段文本不同之处的方法
May 30 #Python
python统计文本文件内单词数量的方法
May 30 #Python
python使用win32com库播放mp3文件的方法
May 30 #Python
基于wxpython开发的简单gui计算器实例
May 30 #Python
python图像处理之镜像实现方法
May 30 #Python
You might like
php array_intersect比array_diff快(附详细的使用说明)
2011/07/03 PHP
php截取后台登陆密码的代码
2012/05/05 PHP
PHP遍历目录并返回统计目录大小
2014/06/09 PHP
php5.2的curl-bug 服务器被php进程卡死问题排查
2016/09/19 PHP
php版微信小店API二次开发及使用示例
2016/11/12 PHP
IE无法设置短域名下Cookie
2010/09/23 Javascript
Document.location.href和.replace的区别示例介绍
2014/03/04 Javascript
Javascript中对象继承的实现小例
2014/05/12 Javascript
javascript定义变量时有var和没有var的区别探讨
2014/07/21 Javascript
javascript实现博客园页面右下角返回顶部按钮
2015/02/22 Javascript
简介JavaScript中的setDate()方法的使用
2015/06/11 Javascript
jquery实现根据浏览器窗口大小自动缩放图片的方法
2015/07/17 Javascript
JavaScript实现获得所有兄弟节点的方法
2015/07/23 Javascript
jQuery支持添加事件的日历特效代码分享(3种样式)
2015/08/24 Javascript
js格式化时间的方法
2015/12/18 Javascript
jQuery 移动端artEditor富文本编辑器
2016/01/11 Javascript
基于d3.js实现实时刷新的折线图
2016/08/03 Javascript
Canvas放置反弹效果随机图形(实例)
2017/08/17 Javascript
JavaScript基础教程之如何实现一个简单的promise
2018/09/11 Javascript
浅谈关于iview表单验证的问题
2018/09/29 Javascript
使用VueRouter的addRoutes方法实现动态添加用户的权限路由
2019/06/03 Javascript
在Python下使用Txt2Html实现网页过滤代理的教程
2015/04/11 Python
Python操作Redis之设置key的过期时间实例代码
2018/01/25 Python
在windows下Python打印彩色字体的方法
2018/05/15 Python
纯用NumPy实现神经网络的示例代码
2018/10/24 Python
想学python 这5本书籍你必看!
2018/12/11 Python
python实现高斯(Gauss)迭代法的例子
2019/11/20 Python
Python实现验证码识别
2020/06/15 Python
如何在keras中添加自己的优化器(如adam等)
2020/06/19 Python
HTML5 form标签之解放表单验证、增加文件上传、集成拖放的使用方法
2013/04/24 HTML / CSS
法国床上用品商店:La Compagnie du lit
2019/12/26 全球购物
物业总经理岗位职责
2014/02/28 职场文书
公司应聘求职信
2014/06/21 职场文书
2014年银行员工年终自我评价
2014/09/19 职场文书
2015年教研工作总结
2015/05/23 职场文书
公司趣味运动会开幕词
2016/03/04 职场文书