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中的pass语句使用方法讲解
May 14 Python
Python 3中的yield from语法详解
Jan 18 Python
python使用标准库根据进程名如何获取进程的pid详解
Oct 31 Python
Python 实现数据结构-堆栈和队列的操作方法
Jul 17 Python
python Django里CSRF 对应策略详解
Aug 05 Python
python并发爬虫实用工具tomorrow实用解析
Sep 25 Python
django框架中ajax的使用及避开CSRF 验证的方式详解
Dec 11 Python
利用PyQt中的QThread类实现多线程
Feb 18 Python
基于python检查SSL证书到期情况代码实例
Apr 04 Python
对Keras中predict()方法和predict_classes()方法的区别说明
Jun 09 Python
Python常用类型转换实现代码实例
Jul 28 Python
如何利用python实现Simhash算法
Jun 28 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
一个简单的MySQL数据浏览器
2006/10/09 PHP
PHP 可阅读随机字符串代码
2010/05/26 PHP
在PHP中使用curl_init函数的说明
2010/11/02 PHP
set_include_path和get_include_path使用及注意事项
2013/02/02 PHP
php ci框架中加载css和js文件失败的原因及解决方法
2014/07/29 PHP
推荐几款用 Sublime Text 开发 Laravel 所用到的插件
2014/10/30 PHP
TP(thinkPHP)框架多层控制器和多级控制器的使用示例
2018/06/13 PHP
jquery中通过父级查找进行定位示例
2013/06/28 Javascript
解决js中window.open弹出的是上次的缓存页面问题
2013/12/29 Javascript
javascript瀑布流布局实现方法详解
2016/02/17 Javascript
Vue.js 2.0 和 React、Augular等其他前端框架大比拼
2016/10/08 Javascript
JS匿名函数类生成方式实例分析
2016/11/26 Javascript
JS数组操作中的经典算法实例讲解
2017/07/26 Javascript
让nodeJS支持ES6的词法----babel的安装和使用方法
2017/07/31 NodeJs
JavaScript求一组数的最小公倍数和最大公约数常用算法详解【面向对象,回归迭代和循环】
2018/05/07 Javascript
js实现unicode码字符串与utf8字节数据互转详解
2019/03/21 Javascript
layui输入框中只允许输入整数的实现方法
2019/09/18 Javascript
Python装饰器使用示例及实际应用例子
2015/03/06 Python
python实现逆波兰计算表达式实例详解
2015/05/06 Python
深入解析Python编程中JSON模块的使用
2015/10/15 Python
python GUI实例学习
2017/11/21 Python
Python用5行代码写一个自定义简单二维码
2018/10/21 Python
python opencv实现gif图片分解的示例代码
2019/12/13 Python
Django的ListView超详细用法(含分页paginate)
2020/05/21 Python
使用PyCharm安装pytest及requests的问题
2020/07/31 Python
如何防止同一个帐户被多人同时登录
2013/08/01 面试题
党员活动日总结
2014/05/05 职场文书
机电一体化专业毕业生自荐信
2014/06/19 职场文书
农村党支部书记四风问题个人对照检查材料
2014/09/21 职场文书
2014标准社保办理委托书
2014/10/06 职场文书
上下班时间调整通知
2015/04/23 职场文书
初中生物教学随笔
2015/08/15 职场文书
上手简单,功能强大的Python爬虫框架——feapder
2021/04/27 Python
MySQL中使用or、in与union all在查询命令下的效率对比
2021/05/26 MySQL
MySql 缓存查询原理与缓存监控和索引监控介绍
2021/07/02 MySQL
详细介绍MySQL中limit和offset的用法
2022/05/06 MySQL