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创建临时文件夹的方法
Jul 06 Python
python数据结构链表之单向链表(实例讲解)
Jul 25 Python
python日期时间转为字符串或者格式化输出的实例
May 29 Python
python之Flask实现简单登录功能的示例代码
Dec 24 Python
python3安装speech语音模块的方法
Dec 24 Python
Python面向对象思想与应用入门教程【类与对象】
Apr 12 Python
Python循环结构的应用场景详解
Jul 11 Python
Python3内置模块之base64编解码方法详解
Jul 13 Python
python中sklearn的pipeline模块实例详解
May 21 Python
python使用selenium爬虫知乎的方法示例
Oct 28 Python
tensorflow与numpy的版本兼容性问题的解决
Jan 08 Python
详解python第三方库的安装、PyInstaller库、random库
Mar 03 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 字符串操作入门教程
2006/12/06 PHP
PHP合并数组函数array_merge用法分析
2017/02/17 PHP
Laravel框架使用Redis的方法详解
2018/05/30 PHP
JavaScript 实现模态对话框 源代码大全
2009/05/02 Javascript
使用jQuery解决IE与FireFox下createElement方法的差异
2013/11/14 Javascript
jquery操作checkbox示例分享
2014/07/21 Javascript
vuejs2.0实现分页组件使用$emit进行事件监听数据传递的方法
2017/02/22 Javascript
解决vue组件中使用v-for出现告警问题及v for指令介绍
2017/11/11 Javascript
浅谈PDF.js使用心得
2018/06/07 Javascript
小程序scroll-view组件实现滚动的示例代码
2018/09/20 Javascript
基于JavaScript实现一个简单的Vue
2018/09/26 Javascript
vue项目中在外部js文件中直接调用vue实例的方法比如说this
2019/04/28 Javascript
Nuxt.js实现一个SSR的前端博客的示例代码
2019/09/06 Javascript
详解React中共享组件逻辑的三种方式
2021/02/02 Javascript
使用 Python 获取 Linux 系统信息的代码
2014/07/13 Python
Python3基础之条件与循环控制实例解析
2014/08/13 Python
Python中的defaultdict与__missing__()使用介绍
2018/02/03 Python
浅谈pandas中shift和diff函数关系
2018/04/08 Python
python实现从pdf文件中提取文本,并自动翻译的方法
2018/11/28 Python
python语言线程标准库threading.local解读总结
2019/11/10 Python
python如何实现单链表的反转
2020/02/10 Python
基于Tensorflow读取MNIST数据集时网络超时的解决方式
2020/06/22 Python
python爬虫使用scrapy注意事项
2020/11/23 Python
Hertz荷兰:荷兰和全球租车
2018/01/07 全球购物
美国生鲜及杂货电商:FreshDirect
2018/01/29 全球购物
Lowe’s加拿大:家居装修、翻新和五金店
2019/12/06 全球购物
在求职信中如何凸显个人优势
2013/10/30 职场文书
《回乡偶书》教学反思
2014/04/12 职场文书
公司爱心捐款倡议书
2014/05/14 职场文书
2014最新房贷收入证明范本
2014/09/12 职场文书
2014年社区居委会主任重阳节讲话稿
2014/09/25 职场文书
单位计划生育责任书
2015/05/09 职场文书
golang slice元素去重操作
2021/04/30 Golang
python中如何对多变量连续赋值
2021/06/03 Python
MySQL之select、distinct、limit的使用
2021/11/11 MySQL
PostgreSQL 插入INSERT、删除DELETE、更新UPDATE、事务transaction
2022/04/12 PostgreSQL