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编程中对Monkey Patch猴子补丁开发方式的运用
May 27 Python
Python实现基于多线程、多用户的FTP服务器与客户端功能完整实例
Aug 18 Python
python编程使用selenium模拟登陆淘宝实例代码
Jan 25 Python
PyCharm+PySpark远程调试的环境配置的方法
Nov 29 Python
python 内置模块详解
Jan 01 Python
Python pip替换为阿里源的方法步骤
Jul 02 Python
如何基于Python实现数字类型转换
Feb 07 Python
Python工程师必考的6个经典面试题
Jun 28 Python
python 基于opencv实现高斯平滑
Dec 18 Python
python基于爬虫+django,打造个性化API接口
Jan 21 Python
详解修改Anaconda中的Jupyter Notebook默认工作路径的三种方式
Jan 24 Python
anaconda python3.8安装后降级
Jun 11 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
判断Keep-Alive模式的HTTP请求的结束的实现代码
2011/08/06 PHP
php 带逗号千位符数字的处理方法
2012/01/10 PHP
PHP设计模式之迭代器模式
2016/06/17 PHP
PHP defined()函数的使用图文详解
2019/07/20 PHP
PHP 枚举类型的管理与设计知识点总结
2020/02/13 PHP
gearman中任务的优先级和返回状态实例分析
2020/02/27 PHP
Javascript与flash交互通信基础教程
2008/08/07 Javascript
整理一些JavaScript的IE和火狐的兼容性注意事项
2011/03/17 Javascript
修改jQuery Validation里默认的验证方法
2012/02/14 Javascript
jQuery拖拽div实现思路
2014/02/19 Javascript
浅谈JavaScript数据类型及转换
2015/02/28 Javascript
JavaScript获取DOM元素的11种方法总结
2015/04/25 Javascript
详解Vue方法与事件
2017/03/09 Javascript
node通过express搭建自己的服务器
2017/09/30 Javascript
Node.js中sequelize时区的配置方法
2017/12/10 Javascript
详解React Native 屏幕适配(炒鸡简单的方法)
2018/06/11 Javascript
webpack DllPlugin xxx is not defined解决办法
2019/12/13 Javascript
Vue实现点击箭头上下移动效果
2020/06/11 Javascript
[01:57]DOTA2上海特锦赛小组赛解说单车采访花絮
2016/02/27 DOTA
怎样使用Python脚本日志功能
2016/08/14 Python
python+selenium开发环境搭建图文教程
2017/08/11 Python
基于Python Numpy的数组array和矩阵matrix详解
2018/04/04 Python
使用python语言,比较两个字符串是否相同的实例
2018/06/29 Python
python实现连续图文识别
2018/12/18 Python
python使用pipeline批量读写redis的方法
2019/02/18 Python
python实现文件的分割与合并
2019/08/29 Python
pycharm解决关闭flask后依旧可以访问服务的问题
2020/04/03 Python
如何用python免费看美剧
2020/08/11 Python
python自动提取文本中的时间(包含中文日期)
2020/08/31 Python
python基于Kivy写一个图形桌面时钟程序
2021/01/28 Python
移动端rem布局的两种实现方法
2018/01/03 HTML / CSS
HTML5中判断横屏竖屏的方法(移动端)
2016/08/04 HTML / CSS
美国棒球装备和用品商店:Baseball Savings
2018/06/09 全球购物
巴西网上药店:Drogaria Araujo
2021/01/06 全球购物
2014最新毕业证代领委托书
2014/09/26 职场文书
用python自动生成日历
2021/04/24 Python