Django 设置多环境配置文件载入问题
作者:hongweipeng 发布时间:2023-09-08 09:16:19
在上篇文章给大家介绍过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文件夹
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
来源:104.116.116.112.58.47.47.119.119.119.46.104.111.110.103.119.101.105.112.101.110.103.46.99.111.109.47.105.110.100.101.120.46.112.104.112.47.97.114.99.104.105.118.101.115.47.49.57.49.56.


猜你喜欢
- 1、添加一个任务task2 = visit_url('http://another.com', 3)asynicio.run
- 正在看的ORACLE教程是:MySQL安全性指南(3)(转)。 &nb
- 01 目标假设我们要实现一个blog系统,在该系统中有以下两个结构体:type Category struct {  
- 这段时间在用libev的python版本事件模型,总共只有一个py.so文件,没有.py文件查看源码查看接口,最开始用shell命令直接查看
- 本文实例为大家分享了js表格操作的简单方法,供大家参考,具体内容如下<!DOCTYPE html><html> &n
- 此文主要讲述的是SQL Server连接中经常出现的3个常见错误,以及对这三个错误的详细分析,如果你其心存好奇的话,以下的文章将会揭开它的神
- 此方法会导致就好像它是在一个<font size="size">标记的字符串显示在规定的大小语法
- 注意:我使用的是 Entity Framework Core 2.0 (2.0.0-preview2-final)。正式版发布时,功能可能存
- 刚入手vue,有好多的疑问,目前遇到的是vue项目启动之后,输入http://ip:port,我发现浏览器里面显示的地址栏竟然是http:/
- 找到python3的安装路径python3自带一个把python2代码转换成python3代码的程序,叫"2to3"我们
- DRF 框架,全称为 Django Rest Framework,是 Django 内置模块的扩展,用于创建标准化 RESTful API;
- 目录问题背景解决方案主要实现原理:可靠性:SpringBoot 集成使用 Redis 分布式锁使用示例参考文档问题背景现在的应用程序架构中,
- 前言接着上一篇的故事工厂模式继续,手机要出厂,显然光一个手机肯定是不行的,还需要包装盒、充电器等等东西。我们按照上一篇提到的工厂模式,去建立
- 类中定义的方法大致可以分为两类:绑定方法和非绑定方法。其中绑定方法又可以分为绑定到对象的方法和绑定到类的方法。一、绑定方法1 对象的绑定方法
- 学生信息系统提示:python编写的学生成绩管理系统,包括8个功能和打包教程一、功能界面 def menum():
- 想把python提取出来的 加载点反力和某个单元的应力画在同一个XY曲线图上,由于两者数量级差太远,故而需要建立有两个Y轴的XY曲线图。效果
- 扪心自问,你真正了解你卖给用户的是什么玩意么?你所认为革命性的,一定会震惊世界的功能、特色,用户真的买单么?我的意思是,我们总是习惯性的忘记
- 在项目开发的过程中,经常会遇到要查看图像细节的问题,这时候我们通常会,滚动滑轮将图像放大,或者使用电脑内置的放大器功能进行查看,如下图所示,
- 我们知道深度神经网络的本质是输入端数据和输出端数据的一种高维非线性拟合,如何更好的理解它,下面尝试拟合一个正弦函数,本文可以通过简单设置节点
- SQL Server 2016 CTP2.2 安装配置教程下载一个iso文件,解压出来(大约2.8G左右),在该路径下双击Setup.exe