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的Django框架中manage命令的使用与扩展
Apr 11 Python
wxPython的安装图文教程(Windows)
Dec 28 Python
使用Python编写Prometheus监控的方法
Oct 15 Python
python2.7实现邮件发送功能
Dec 12 Python
Python利用pandas处理Excel数据的应用详解
Jun 18 Python
Python流程控制常用工具详解
Feb 24 Python
tensorflow实现将ckpt转pb文件的方法
Apr 22 Python
Anaconda3中的Jupyter notebook添加目录插件的实现
May 18 Python
python:HDF和CSV存储优劣对比分析
Jun 08 Python
利用django创建一个简易的博客网站的示例
Sep 29 Python
python tqdm用法及实例详解
Jun 16 Python
解析python中的jsonpath 提取器
Jan 18 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下读取文本文件的代码
2008/07/02 PHP
php 解决旧系统 查出所有数据分页的类
2012/08/27 PHP
在PHP中使用redis
2013/11/04 PHP
用PHP实现弹出消息提示框的两种方法
2013/12/17 PHP
在Windows系统下使用PHP生成Word文档的教程
2015/07/03 PHP
php+Ajax无刷新验证用户名操作实例详解
2019/03/04 PHP
jQuery 1.5 源码解读 面向中高阶JSER
2011/04/05 Javascript
关于textarea提交的内容无法换行的解决办法
2013/04/09 Javascript
IE中的File域无法清空使用jQuery重设File域
2014/04/24 Javascript
jquery实现的鼠标拖动排序Li或Table
2014/05/04 Javascript
jQuery获取动态生成的元素示例
2014/06/15 Javascript
js使用for循环及if语句判断多个一样的name
2014/09/09 Javascript
JavaScript参数个数可变的函数举例说明
2014/10/10 Javascript
解析浏览器端的AJAX缓存机制
2016/06/21 Javascript
js将滚动条滚动到指定位置的简单实现方法
2016/06/25 Javascript
xmlplus组件设计系列之网格(DataGrid)(10)
2017/05/05 Javascript
详解webpack+express多页站点开发
2017/12/22 Javascript
微信小程序如何获取用户信息
2018/01/26 Javascript
在 Vue-CLI 中引入 simple-mock实现简易的 API Mock 接口数据模拟
2018/11/28 Javascript
jQuery动态生成的元素绑定事件操作实例分析
2019/05/04 jQuery
在Koa.js中实现文件上传的接口功能
2019/10/08 Javascript
JavaScrip如果基于url实现图片下载
2020/07/03 Javascript
Python 时间处理datetime实例
2008/09/06 Python
Linux中安装Python的交互式解释器IPython的教程
2016/06/13 Python
python读取和保存图片5种方法对比
2018/09/12 Python
python 爬取学信网登录页面的例子
2019/08/13 Python
Python列表list常用内建函数实例小结
2019/10/22 Python
python对指定字符串逆序的6种方法(小结)
2020/04/02 Python
Python模拟登录和登录跳转的参考示例
2020/10/30 Python
canvas进阶之贝塞尔公式推导与物体跟随复杂曲线的轨迹运动
2018/01/10 HTML / CSS
高品质和独特的产品世界:Creations and Collections
2018/01/07 全球购物
世界上最全面的草药补充剂和顶级品牌维生素网站:HerbsPro
2019/01/20 全球购物
意大利在线药房:shop-farmacia.it
2019/03/12 全球购物
家长会学生家长演讲稿
2013/12/29 职场文书
个人债务授权委托书范本
2014/10/05 职场文书
golang 定时任务方面time.Sleep和time.Tick的优劣对比分析
2021/05/05 Golang