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重试装饰器的简单实现方法
Jan 31 Python
Python使用sax模块解析XML文件示例
Apr 04 Python
Python 读取串口数据,动态绘图的示例
Jul 02 Python
python 一个figure上显示多个图像的实例
Jul 08 Python
python 批量添加的button 使用同一点击事件的方法
Jul 17 Python
python遍历文件目录、批量处理同类文件
Aug 31 Python
python 实现Flask中返回图片流给前端展示
Jan 09 Python
使用python绘制cdf的多种实现方法
Feb 25 Python
解决echarts中饼图标签重叠的问题
May 16 Python
Python流程控制语句的深入讲解
Jun 15 Python
python Gabor滤波器讲解
Oct 26 Python
解决Pymongo insert时会自动添加_id的问题
Dec 05 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
使用 php4 加速 web 传输
2006/10/09 PHP
array_multisort实现PHP多维数组排序示例讲解
2011/01/04 PHP
IIS+fastcgi下PHP运行超时问题的解决办法详解
2013/06/20 PHP
php empty 函数判断结果为空但实际值却为非空的原因解析
2018/05/28 PHP
PHP删除数组中特定元素的两种方法
2019/02/28 PHP
Js+XML 操作
2006/09/20 Javascript
建立良好体验度的Web注册系统ajax
2007/07/09 Javascript
javascript dom 操作详解 js加强
2009/07/13 Javascript
jquery中获得$.ajax()事件返回的值并添加事件的方法
2010/04/15 Javascript
window.parent与window.openner区别介绍
2012/04/12 Javascript
js中用window.open()打开多个窗口的name问题
2014/03/13 Javascript
使用typeof判断function是否存在于上下文
2014/08/14 Javascript
js/jquery判断浏览器类型的方法小结
2015/05/12 Javascript
微信JS-SDK坐标位置如何转换为百度地图坐标
2016/07/04 Javascript
Angular页面间切换及传值的4种方法
2016/11/04 Javascript
JS拉起或下载app的实现代码
2017/02/22 Javascript
jQuery插件HighCharts绘制2D圆环图效果示例【附demo源码下载】
2017/03/09 Javascript
vue组件实现进度条效果
2018/06/06 Javascript
vue模仿网易云音乐的单页面应用
2019/04/24 Javascript
js+html5 canvas实现ps钢笔抠图
2019/04/28 Javascript
IE11下处理Promise及Vue的单项数据流问题
2019/07/24 Javascript
Vue通过阿里云oss的url连接直接下载文件并修改文件名的方法
2020/12/25 Vue.js
python远程连接服务器MySQL数据库
2018/07/02 Python
python cs架构实现简单文件传输
2020/03/20 Python
Django CBV与FBV原理及实例详解
2019/08/12 Python
pytorch下使用LSTM神经网络写诗实例
2020/01/14 Python
python代码中怎么换行
2020/06/17 Python
python 窃取摄像头照片的实现示例
2021/01/08 Python
Microsoft Advertising美国:微软搜索广告
2019/05/01 全球购物
英国最大的滑板品牌选择:Route One
2019/09/22 全球购物
PHP面试题-$message和$$message的区别
2015/12/08 面试题
我的理想演讲稿
2014/04/30 职场文书
元旦标语大全
2014/10/09 职场文书
毕业生班级鉴定评语
2015/01/04 职场文书
2015年毕业生实习评语
2015/03/25 职场文书
PHP面试题 wakeup魔法 Ezpop pop序列化与反序列化
2022/04/11 PHP