Django如何配置多个环境的MySQL数据库

devtools/2024/11/27 7:55:38/

在 Django 项目中配置多个环境的 MySQL 数据库是一个常见的需求,特别是在开发、测试和生产环境中使用不同的数据库配置。你可以通过在 settings.py 文件中使用条件语句或环境变量来实现这一点。

1. 使用环境变量

使用环境变量是一种灵活且安全的方式来配置多个环境的数据库。你可以使用 django-environ 库来简化环境变量的管理。

djangoenviron_6">安装 django-environ

首先,安装 django-environ 库:

pip install django-environ
配置 settings.py

编辑 settings.py 文件,使用 environ 来读取环境变量:

python"># myproject/settings.pyimport environ# 初始化环境变量
env = environ.Env()
environ.Env.read_env()# 数据库配置
DATABASES = {'default': env.db('DATABASE_URL', default='mysql://root:password@localhost:3306/dbname')
}# 其他配置
DEBUG = env.bool('DEBUG', default=False)
SECRET_KEY = env('SECRET_KEY')
ALLOWED_HOSTS = env.list('ALLOWED_HOSTS', default=['localhost'])
设置环境变量

在不同的环境中设置相应的环境变量。你可以在 .env 文件中设置这些变量,或者在操作系统中直接设置。

.env 文件示例

在项目根目录下创建一个 .env 文件,并添加以下内容:

# 开发环境
DEBUG=True
SECRET_KEY=your_secret_key_for_development
ALLOWED_HOSTS=localhost,127.0.0.1
DATABASE_URL=mysql://root:password@localhost:3306/dev_db# 测试环境
# DEBUG=False
# SECRET_KEY=your_secret_key_for_testing
# ALLOWED_HOSTS=localhost,127.0.0.1
# DATABASE_URL=mysql://root:password@localhost:3306/test_db# 生产环境
# DEBUG=False
# SECRET_KEY=your_secret_key_for_production
# ALLOWED_HOSTS=yourdomain.com
# DATABASE_URL=mysql://root:password@10.177.111.228:3306/ostp
操作系统环境变量

你也可以在操作系统的环境变量中设置这些值。例如,在 Linux 或 macOS 上,你可以在终端中运行:

export DEBUG=True
export SECRET_KEY=your_secret_key_for_development
export ALLOWED_HOSTS=localhost,127.0.0.1
export DATABASE_URL=mysql://root:password@localhost:3306/dev_db

Windows批处理

在bat脚本中设置了
@echo off
chcp 65001
echo "设置数据库运行环境为开发环境"
set DEBUG=True
set SECRET_KEY=123456
set ALLOWED_HOSTS=localhost,127.0.0.1
set DATABASE_URL=mysql://root:123456@localhost:3306/test

2. 使用多个 settings 文件

另一种方法是为每个环境创建一个单独的 settings 文件。这种方式更加直观,但可能会导致更多的文件管理。

创建多个 settings 文件

myproject 目录下创建以下文件:

  • settings_base.py:基础配置
  • settings_dev.py:开发环境配置
  • settings_test.py:测试环境配置
  • settings_prod.py:生产环境配置
settings_base.py
python"># myproject/settings_base.pyimport os# 基础配置
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
SECRET_KEY = 'your_default_secret_key'
ALLOWED_HOSTS = []INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles',# 你的应用'myapp',
]MIDDLEWARE = ['django.middleware.security.SecurityMiddleware','django.contrib.sessions.middleware.SessionMiddleware','django.middleware.common.CommonMiddleware','django.middleware.csrf.CsrfViewMiddleware','django.contrib.auth.middleware.AuthenticationMiddleware','django.contrib.messages.middleware.MessageMiddleware','django.middleware.clickjacking.XFrameOptionsMiddleware',
]ROOT_URLCONF = 'myproject.urls'TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates','DIRS': [],'APP_DIRS': True,'OPTIONS': {'context_processors': ['django.template.context_processors.debug','django.template.context_processors.request','django.contrib.auth.context_processors.auth','django.contrib.messages.context_processors.messages',],},},
]WSGI_APPLICATION = 'myproject.wsgi.application'# 静态文件配置
STATIC_URL = '/static/'
settings_dev.py
python"># myproject/settings_dev.pyfrom .settings_base import *# 开发环境配置
DEBUG = True
SECRET_KEY = 'your_secret_key_for_development'
ALLOWED_HOSTS = ['localhost', '127.0.0.1']
DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'dev_db','USER': 'root','PASSWORD': 'password','HOST': 'localhost','PORT': '3306',}
}
settings_test.py
python"># myproject/settings_test.pyfrom .settings_base import *# 测试环境配置
DEBUG = False
SECRET_KEY = 'your_secret_key_for_testing'
ALLOWED_HOSTS = ['localhost', '127.0.0.1']
DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'test_db','USER': 'root','PASSWORD': 'password','HOST': 'localhost','PORT': '3306',}
}
settings_prod.py
python"># myproject/settings_prod.pyfrom .settings_base import *# 生产环境配置
DEBUG = False
SECRET_KEY = 'your_secret_key_for_production'
ALLOWED_HOSTS = ['yourdomain.com']
DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'ostp','USER': 'root','PASSWORD': 'ostp','HOST': '10.177.111.228','PORT': '3306',}
}
配置 manage.pywsgi.py

manage.pywsgi.py 中指定使用哪个 settings 文件。

manage.py
python">#!/usr/bin/env python
import os
import sysif __name__ == "__main__":os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings_dev')  # 根据需要切换环境try:from django.core.management import execute_from_command_lineexcept ImportError as exc:raise ImportError("Couldn't import Django. Are you sure it's installed and ""available on your PYTHONPATH environment variable? Did you ""forget to activate a virtual environment?") from excexecute_from_command_line(sys.argv)
wsgi.py
python">import os
from django.core.wsgi import get_wsgi_applicationos.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings_prod')  # 根据需要切换环境
application = get_wsgi_application()

总结

通过使用环境变量或多个 settings 文件,你可以在 Django 项目中轻松地配置多个环境的 MySQL 数据库。选择哪种方法取决于你的具体需求和团队的工作流程。使用环境变量可以提供更好的灵活性和安全性,而使用多个 settings 文件则更加直观和易于管理。


http://www.ppmy.cn/devtools/137339.html

相关文章

分页/列表分页

分页和单列表差不多,只是多加了点数据 一 : 实体类 1. 原生实体类 和 2.vo实体类 vo实体类包含原生实体类的所有字段 再新字段 原生(数据库里的字段) vo(多条件查询字段 ,分页字段) 分页字段 : private Integer pageNum1 //起始页 private Integer pageSize 4 //显示页数…

小程序-基于java+SpringBoot+Vue的网上花店微信小程序设计与实现

项目运行 1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA; 3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可 4.硬件环境&#xff1a…

Java【多线程】(1)进程与线程

目录 1.前言 2.正文 2.1什么是进程 2.2PCB(进程控制块) 2.2.1进程id 2.2.2内存指针 2.2.3文件描述符表 2.2.4进程状态 2.2.4.1就绪状态 2.2.4.2阻塞状态 2.2.5进程优先级 2.2.6进程上下文 2.2.7进程的记账信息 2.3CPU操作进程的方法 2.4什…

鸿蒙学习自由流转与分布式运行环境-价值与架构定义(1)

文章目录 价值与架构定义1、价值2、架构定义 随着个人设备数量越来越多,跨多个设备间的交互将成为常态。基于传统 OS 开发跨设备交互的应用程序时,需要解决设备发现、设备认证、设备连接、数据同步等技术难题,不但开发成本高,还存…

C++设计模式之组合模式中适用缓存机制提高遍历与查找速度

在组合设计模式中,为了提高反复遍历和查找的速度,可以引入缓存机制。缓存机制可以通过存储已经遍历过的子组件或计算过的结果来减少重复操作的开销。以下是一个示例,展示了如何在组合模式中使用缓存机制来提高性能。 示例:组合设…

云原生世界的多面体:K8s、容器云、裸金属与云原生的深度解析

目录 引言Kubernetes(K8s) K8s 的定义与架构K8s 的优势与局限 容器云 容器云的定义与核心功能容器云与 Kubernetes 的关系 裸金属 裸金属的定义与应用场景裸金属与虚拟化的比较 云原生 云原生的核心理念云原生与 K8s、容器云、裸金属的关系 技术对比与应…

通过指令导入/导出vscode扩展插件

导出扩展: 打开VSCode终端: 在VSCode中,你可以通过菜单栏的“终端”选项打开终端,或者使用快捷键Ctrl (反引号,通常在键盘左上角)。运行导出命令: 在终端中,输入以下命…

MyBatis 操作数据库(进阶)

1. 动态 SQL 动态 SQL 是 MyBatis 的强大特性之一&#xff0c;能够完成不同条件下不同的 SQL 拼接 官方文档&#xff1a;动态 SQL_MyBatis中文网 1.1 <if> 标签 在注册用户的场景中&#xff0c;注册可能会分为两种字段&#xff1a;必填字段和非必填字段 如&#xff…