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 相关文章推荐
仅用500行Python代码实现一个英文解析器的教程
Apr 02 Python
在Python中使用全局日志时需要注意的问题
May 06 Python
Python编程之序列操作实例详解
Jul 22 Python
浅谈python爬虫使用Selenium模拟浏览器行为
Feb 23 Python
对numpy.append()里的axis的用法详解
Jun 28 Python
Django集成搜索引擎Elasticserach的方法示例
Jun 04 Python
如何在django中实现分页功能
Apr 22 Python
Django权限设置及验证方式
May 13 Python
Python导入数值型Excel数据并生成矩阵操作
Jun 09 Python
互斥锁解决 Python 中多线程共享全局变量的问题(推荐)
Sep 28 Python
Python中Selenium模块的使用详解
Oct 09 Python
使用Python开发冰球小游戏
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
WordPress中设置Post Type自定义文章类型的实例教程
2016/05/10 PHP
Yii2实现上下联动下拉框功能的方法
2016/08/10 PHP
php微信公众平台配置接口开发程序
2016/09/22 PHP
JSON扫盲帖 JSON.as类教程
2009/02/16 Javascript
JS学习之一个简易的日历控件
2010/03/24 Javascript
JS正则中的RegExp对象对象
2012/11/07 Javascript
JS匿名函数实例分析
2016/11/26 Javascript
详解JS中的this、apply、call、bind(经典面试题)
2017/09/19 Javascript
React Form组件的实现封装杂谈
2018/05/07 Javascript
es6 filter() 数组过滤方法总结
2019/04/03 Javascript
vue自定义js图片碎片轮播图切换效果的实现代码
2019/04/28 Javascript
jQuery实现的记住帐号密码功能完整示例
2019/08/03 jQuery
浅谈鸿蒙 JavaScript GUI 技术栈
2020/09/17 Javascript
[02:23]完美世界全国高校联赛街访DOTA2第一期
2019/11/28 DOTA
python实现百度关键词排名查询
2014/03/30 Python
python解决Fedora解压zip时中文乱码的方法
2016/09/18 Python
pandas 实现字典转换成DataFrame的方法
2018/07/04 Python
Python对切片命名的实现方法
2018/10/16 Python
解决Python一行输出不显示的问题
2018/12/03 Python
对IPython交互模式下的退出方法详解
2019/02/16 Python
对Django中的权限和分组管理实例讲解
2019/08/16 Python
Numpy对数组的操作:创建、变形(升降维等)、计算、取值、复制、分割、合并
2019/08/28 Python
flask框架渲染Jinja模板与传入模板变量操作详解
2020/01/25 Python
Python装饰器结合递归原理解析
2020/07/02 Python
python 检测nginx服务邮件报警的脚本
2020/12/31 Python
HTML5 form标签之解放表单验证、增加文件上传、集成拖放的使用方法
2013/04/24 HTML / CSS
HTML5新增form控件和表单属性实例代码详解
2019/05/15 HTML / CSS
俄罗斯奢侈品牌衣服、鞋子和配饰的在线商店:INTERMODA
2020/07/17 全球购物
简述使用ftp进行文件传输时的两种登录方式?它们的区别是什么?常用的ftp文件传输命令是什么?
2016/11/20 面试题
小区门卫岗位职责
2013/12/31 职场文书
信息专业学生学习的自我评价
2014/02/17 职场文书
金融事务专业毕业生求职信
2014/02/23 职场文书
写自荐信的注意事项
2014/03/09 职场文书
工会2014法制宣传日活动总结
2014/11/01 职场文书
工程服务质量承诺书
2015/04/29 职场文书
在职证明格式样本
2015/06/15 职场文书