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基于matplotlib实现绘制三维图形功能示例
Jan 18 Python
Python3 读、写Excel文件的操作方法
Oct 20 Python
python随机在一张图像上截取任意大小图片的方法
Jan 24 Python
python 实现在一张图中绘制一个小的子图方法
Jul 07 Python
python求绝对值的三种方法小结
Dec 04 Python
python计算导数并绘图的实例
Feb 29 Python
在python中list作函数形参,防止被实参修改的实现方法
Jun 05 Python
pytorch 限制GPU使用效率详解(计算效率)
Jun 27 Python
tensorflow 大于某个值为1,小于为0的实例
Jun 30 Python
Python常用数字处理基本操作汇总
Sep 10 Python
Python中的None与 NULL(即空字符)的区别详解
Sep 24 Python
详解Python中的for循环
Apr 30 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
php printf输出格式使用说明
2010/12/05 PHP
php数组去重复数据示例
2014/02/25 PHP
Linux下编译redis和phpredis的方法
2016/04/07 PHP
Yii2结合Workerman的websocket示例详解
2018/09/10 PHP
用JS控制回车事件的代码
2011/02/20 Javascript
jquery加载页面的方法(页面加载完成就执行)
2011/06/21 Javascript
js的onload事件及初始化按钮事件示例代码
2013/09/25 Javascript
Javascript中Array用法实例分析
2015/06/13 Javascript
jqPlot jQuery绘图插件的使用
2016/06/18 Javascript
JavaScript中有关一个数组中最大值和最小值及它们的下表的输出的解决办法
2016/07/01 Javascript
AngularJS实现动态编译添加到dom中的方法
2016/11/04 Javascript
懒加载实现的分页&amp;&amp;网站footer自适应
2016/12/21 Javascript
Angular.JS内置服务$http对数据库的增删改使用教程
2017/05/07 Javascript
JS块级作用域和私有变量实例分析
2019/05/11 Javascript
ElementUI radio组件选中小改造
2019/08/12 Javascript
微信小程序以ssm做后台开发的实现示例
2020/04/08 Javascript
js cavans实现静态滚动弹幕
2020/05/21 Javascript
vue-video-player实现实时视频播放方式(监控设备-rtmp流)
2020/08/10 Javascript
微信小程序实现滚动Tab选项卡
2020/11/16 Javascript
[01:17:12]职来职往完美电竞专场
2014/09/18 DOTA
浅谈python中的占位符
2017/11/09 Python
Python 使用with上下文实现计时功能
2018/03/09 Python
Python查看微信撤回消息代码
2018/06/07 Python
python 实现12bit灰度图像映射到8bit显示的方法
2019/07/08 Python
python元组的概念知识点
2019/11/19 Python
Python3 socket即时通讯脚本实现代码实例(threading多线程)
2020/06/01 Python
日本即尚网:JSHOPPERS.com(支持中文)
2019/12/03 全球购物
Linux的文件类型
2016/07/05 面试题
医学生自我鉴定范文
2013/11/08 职场文书
关于旷工的检讨书
2014/02/02 职场文书
房地产营销策划方案
2014/02/08 职场文书
好人好事事迹材料
2014/02/12 职场文书
活动总结格式范文
2014/04/26 职场文书
我是一名护士演讲稿
2014/08/28 职场文书
2014年幼儿园教学工作总结
2014/12/04 职场文书
环卫工作个人总结
2015/03/04 职场文书