Django 设置多环境配置文件载入问题


Posted in Python onFebruary 25, 2020

在上篇文章给大家介绍过Django 多环境配置详解,感兴趣的朋友可以点击查阅,今天继续给大家介绍django 多环境配置的相关内容,本文重点给大家介绍Django 设置多环境配置文件载入的相关知识,一起看看吧。

起步

通常,针对不同的开发环境,需要不同的配置保证程序可运行且不干扰。单个 settings.py 文件就很难满足需求,需要将他拆分为多个文件,根据特定环境载入不同的配置文件。一种简单的划分就是分为 4 个文件:

__init__.py
base.py
dev.py
prod.py

基本结构

一个初始的 Django 项目目录结构如下:

mysite/
 |-- mysite/
 | |-- __init__.py
 | |-- settings.py
 | |-- urls.py
 | +-- wsgi.py
 +-- manage.py

这时候要做的就是创建一个名为 settings 的文件夹,将 settings.py 重命名为 base.py 并放入文件夹内:

mysite/
 |-- mysite/
 | |-- __init__.py
 | |-- settings/  <-- 新建的文件夹
 | | |-- __init__.py <--
 | | |-- base.py <-- 旧的 settings.py
 | | |-- cli.py <-- 根据不同环境而新增的配置文件
 | | |-- dev.py
 | | +-- prod.py
 | |-- urls.py
 | +-- wsgi.py
 +-- manage.py

base.py 顾名思义,它将成为所有环境的通用配置,扩展的配置文件需要将 base.py 导入:

# settings/dev.py
from .base import *

DEBUG = True

INSTALLED_APPS += [
 'debug_toolbar',
]
...

让配置文件生效

要使配置文件生效,需要让 Django 知道我们要使用哪个配置文件,一种方式就是在命令行中传递这个 --settings=mysite.settings.dev 参数,如:

python manage.py runserver --settings=mysite.settings.dev
python manage.py runserver --settings=mysite.settings.prod
python manage.py migrate --settings=mysite.settings.prod

如果不希望每次指令都传递 --settings 参数,也可以通过修改 manage.py 文件实现使用不同的配置文件:

# manage.py
import os
import sys
if __name__ == "__main__":
 os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings.dev") # 修改这个位置
 ...

在服务器上指定设置

生产环境下一般不会使用 runserver 指令运行,大多是通过 uwsgi 方式运行,修改 mysite/wsgi.py :

import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings.prod")
application = get_wsgi_application()

通过修改 DJANGO_SETTINGS_MODULE 环境变量指向所需的配置文件。

下面看下django settings多环境配置

通常我们会把本地、线上的配置拆分,django不同环境的配置可如下:

1.在settings.py同级目录添加settings文件夹

2.把settings.py移到settings文件夹内,并重命名为base.py

3.添加dev.py, prod.py到settings文件夹

Django 设置多环境配置文件载入问题

4.base.py中的根目录,要改成:

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(os.path.join(__file__, os.pardir))))

说明:

1)一些公共配置,放在base.py中。其他因环境而不同的配置,加到local.py/prod.py中

2)dev.py/prod.py,需要把base.py中的配置导入

from .base import *
DEBUG = True
#其他配置

3)启动服务时,用--setings指定配置

python manage.py runserver --settings=back-server.settings.dev

正式环境用uwsgi部署,则配置环境变量:DJANGO_SETTINGS_MODULE=back-server.settings.prod

总结

到此这篇关于Django 设置多环境配置文件载入的文章就介绍到这了,更多相关django 配置文件载入内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python XML RPC服务器端和客户端实例
Nov 22 Python
Python连接mysql数据库的正确姿势
Feb 03 Python
Python使用dis模块把Python反编译为字节码的用法详解
Jun 14 Python
简述Python2与Python3的不同点
Jan 21 Python
python安装pywin32clipboard的操作方法
Jan 24 Python
pandas去除重复列的实现方法
Jan 29 Python
Python使用numpy模块实现矩阵和列表的连接操作方法
Jun 26 Python
Python Selenium参数配置方法解析
Jan 19 Python
Python re正则表达式元字符分组()用法分享
Feb 10 Python
如何使用Python抓取网页tag操作
Feb 14 Python
PyQt5连接MySQL及QMYSQL driver not loaded错误解决
Apr 29 Python
python实现三次密码验证的示例
Apr 29 Python
python中resample函数实现重采样和降采样代码
Feb 25 #Python
python实现的分层随机抽样案例
Feb 25 #Python
Python可变对象与不可变对象原理解析
Feb 25 #Python
Python 使用 environs 库定义环境变量的方法
Feb 25 #Python
Python 序列化和反序列化库 MarshMallow 的用法实例代码
Feb 25 #Python
python用pip install时安装失败的一系列问题及解决方法
Feb 24 #Python
python numpy--数组的组合和分割实例
Feb 24 #Python
You might like
利用“多说”制作留言板、评论系统
2015/07/14 PHP
降低PHP Redis内存占用
2017/03/23 PHP
浅谈Yii乐观锁的使用及原理
2017/07/25 PHP
php二维数组按某个键值排序的实例讲解
2019/02/15 PHP
使用PHP开发留言板功能
2019/11/19 PHP
jQuery的Ajax时无响应数据的解决方法
2010/05/25 Javascript
容易被忽略的JS脚本特性
2011/09/13 Javascript
javascript在子页面中函数无法调试问题解决方法
2014/01/17 Javascript
js的flv视频播放器插件使用方法
2015/06/23 Javascript
JavaScript中Null与Undefined的区别解析
2015/06/30 Javascript
php基于redis处理session的方法
2016/03/14 Javascript
javascript 数组的正态分布排序的问题
2016/07/31 Javascript
详解JavaScript对象的深浅复制
2017/03/30 Javascript
通过一个简单的例子学会vuex与模块化
2017/11/22 Javascript
Node.js 利用cheerio制作简单的网页爬虫示例
2018/03/01 Javascript
Vue的路由动态重定向和导航守卫实例
2018/03/17 Javascript
jQuery实现的导航条点击后高亮显示功能示例
2019/03/04 jQuery
JQuery获取可视区尺寸和文档尺寸及制作悬浮菜单示例
2019/05/14 jQuery
Vue的编码技巧与规范使用详解
2019/08/28 Javascript
Vue简单实现原理详解
2020/05/07 Javascript
python备份文件以及mysql数据库的脚本代码
2013/06/10 Python
Python之用户输入的实例
2018/06/22 Python
Python实现的连接mssql数据库操作示例
2018/08/17 Python
python 通过手机号识别出对应的微信性别(实例代码)
2019/12/22 Python
python实现发送带附件的邮件代码分享
2020/09/22 Python
python实现图书馆抢座(自动预约)功能的示例代码
2020/09/29 Python
HTML5 Canvas 起步(1) - 基本概念
2009/05/12 HTML / CSS
HTML5 声明兼容IE的写法
2011/05/16 HTML / CSS
美国定制钻石订婚戒指:Ritani
2017/12/08 全球购物
STUBHUB日本:购买和出售全球活动门票
2018/07/01 全球购物
保安自我鉴定范文
2013/12/08 职场文书
顶岗实习接收函
2014/01/09 职场文书
党员批评与自我批评思想汇报
2014/10/08 职场文书
餐厅如何利用“营销策略”扭转亏本局面
2019/10/15 职场文书
小程序实现筛子抽奖
2021/05/26 Javascript
单身狗福利?Python爬取某婚恋网征婚数据
2021/06/03 Python