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中的socket模块使用代理实例
May 29 Python
使用Python解析JSON数据的基本方法
Oct 15 Python
python实现RSA加密(解密)算法
Feb 17 Python
python获取list下标及其值的简单方法
Sep 12 Python
Python多进程原理与用法分析
Aug 21 Python
python实现网页自动签到功能
Jan 21 Python
Python面向对象实现一个对象调用另一个对象操作示例
Apr 08 Python
Python数据类型之Set集合实例详解
May 07 Python
python GUI模拟实现计算器
Jun 22 Python
用python批量下载apk
Dec 29 Python
用Python提取PDF表格的方法
Apr 11 Python
pycharm 如何查看某一函数源码的快捷键
May 12 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/03/27 PHP
PHP与C#分别格式化文件大小的代码
2011/05/14 PHP
codeigniter使用技巧批量插入数据实例方法分享
2013/12/31 PHP
C#使用PHP服务端的Web Service通信实例
2014/04/08 PHP
yii2.0整合阿里云oss的示例代码
2017/09/19 PHP
“不能执行已释放的Script代码”错误的原因及解决办法
2007/09/09 Javascript
js操作iframe的一些方法介绍
2013/06/25 Javascript
js实现div的切换特效上一个下一个
2014/02/11 Javascript
调用DOM对象的focus使文本框获得焦点
2014/02/19 Javascript
js获取url中&quot;?&quot;后面的字串方法
2014/05/15 Javascript
设计模式中的组合模式在JavaScript程序构建中的使用
2016/05/18 Javascript
js实现String.Fomat的实例代码
2016/09/02 Javascript
AngularJS中的DOM操作用法分析
2016/11/04 Javascript
用director.js实现前端路由使用实例
2017/01/27 Javascript
jQuery按需加载轮播图(web前端性能优化)
2017/02/17 Javascript
微信小程序中子页面向父页面传值实例详解
2017/03/20 Javascript
AngularJS service之select下拉菜单效果
2017/07/28 Javascript
electron中使用bootstrap的示例代码
2018/11/06 Javascript
简单易扩展可控性强的Jquery转盘抽奖程序
2019/03/16 jQuery
小程序实现搜索框功能
2020/03/26 Javascript
jQuery实现本地存储
2020/12/22 jQuery
[49:05]OG vs Newbee 2019DOTA2国际邀请赛淘汰赛 胜者组 BO3 第二场 8.21.mp4
2020/07/19 DOTA
Python实现获取磁盘剩余空间的2种方法
2017/06/07 Python
python 按照固定长度分割字符串的方法小结
2018/04/30 Python
python 自定义异常和异常捕捉的方法
2018/10/18 Python
详解opencv Python特征检测及K-最近邻匹配
2019/01/21 Python
Python 实现简单的客户端认证
2020/07/29 Python
Selenium获取登录Cookies并添加Cookies自动登录的方法
2020/12/04 Python
Java里面有没有全局变量?为什么?
2015/02/06 面试题
.NET面试题:什么是值类型和引用类型
2016/01/12 面试题
中科前程Java笔试题
2016/11/20 面试题
自考毕业自我鉴定
2014/03/18 职场文书
公司授权委托书格式范文
2014/10/02 职场文书
个人委托书范文
2015/01/28 职场文书
博士生专家推荐信
2015/03/25 职场文书
钱学森电影观后感
2015/06/04 职场文书