Django配置多个环境的MySQL数据库的完整指南

 更新时间:2025年04月25日 11:16:34   作者:知识的宝藏  
在 Django 项目中配置多个环境的 MySQL 数据库是一个常见的需求,本文为大家详细介绍了配置的完整方法,感兴趣的小伙伴可以跟随小编一起学习一下

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

1. 使用环境变量

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

安装 django-environ

首先,安装 django-environ 库:

pip install django-environ

配置 settings.py

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

# myproject/settings.py

import 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

# myproject/settings_base.py

import 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

# myproject/settings_dev.py

from .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

# myproject/settings_test.py

from .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

# myproject/settings_prod.py

from .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.py 和 wsgi.py

在 manage.py 和 wsgi.py 中指定使用哪个 settings 文件。

manage.py

#!/usr/bin/env python
import os
import sys

if __name__ == "__main__":
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings_dev')  # 根据需要切换环境
    try:
        from django.core.management import execute_from_command_line
    except 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 exc
    execute_from_command_line(sys.argv)

wsgi.py

import os
from django.core.wsgi import get_wsgi_application

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings_prod')  # 根据需要切换环境
application = get_wsgi_application()

总结

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

以上就是Django配置多个环境的MySQL数据库的完整指南的详细内容,更多关于Django配置MySQL的资料请关注脚本之家其它相关文章!

相关文章

  • python实现搜索本地文件信息写入文件的方法

    python实现搜索本地文件信息写入文件的方法

    这篇文章主要介绍了python实现搜索本地文件信息写入文件的方法,涉及Python针对文件的遍历及属性操作相关技巧,需要的朋友可以参考下
    2016-02-02
  • Python的Flask框架中web表单的教程

    Python的Flask框架中web表单的教程

    这篇文章主要介绍了Python的Flask框架中web表单的教程,表单是学习各个web框架中的基础知识,需要的朋友可以参考下
    2015-04-04
  • python分分钟绘制精美地图海报

    python分分钟绘制精美地图海报

    基于Python中诸如matplotlib等功能丰富、自由度极高的绘图库,我们可以完成各种极富艺术感的可视化作品,关于这一点我在系列文章在模仿中精进数据可视化中已经带大家学习过很多案例了
    2022-02-02
  • Django进阶之CSRF的解决

    Django进阶之CSRF的解决

    这篇文章主要介绍了Django进阶之CSRF的解决,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08
  • Python编程实现下载器自动爬取采集B站弹幕示例

    Python编程实现下载器自动爬取采集B站弹幕示例

    这篇文章主要介绍了使用Python编程来实现一个下载器可以自动爬取采集B站弹幕的示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2021-10-10
  • Python报错ImportError: IProgress not found. Please update jupyter and ipywidgets解决

    Python报错ImportError: IProgress not found. Please update

    在使用Jupyter Notebook或JupyterLab进行交互式编程时,我们可能会遇到各种导入错误,本文就来介绍一下Python报错ImportError: IProgress not found. Please update jupyter and ipywidgets解决,感兴趣的可以了解一下
    2024-06-06
  • python用folium绘制地图并设置弹窗效果

    python用folium绘制地图并设置弹窗效果

    这篇文章主要介绍了python用folium绘制地图并设置弹窗,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • Python基础之元编程知识总结

    Python基础之元编程知识总结

    很多人不理解“元编程”是个什么东西,关于它也没有一个十分准确的定义.这篇文章要说的是Python里的元编程,实际上也不一定就真的符合“元编程”的定义.只不过我无法找到一个更准确的名字来代表这篇文章的主题,所以就借了这么一个名号,需要的朋友可以参考下
    2021-05-05
  • python分割文件的常用方法

    python分割文件的常用方法

    这篇文章主要介绍了python分割文件的常用方法,包括指定分割大小、按行分割与分割合并等技巧,非常实用,需要的朋友可以参考下
    2014-11-11
  • Python单元测试框架unittest使用方法讲解

    Python单元测试框架unittest使用方法讲解

    这篇文章主要介绍了Python单元测试框架unittest使用方法讲解,本文讲解了unittest概述、命令行接口、测试案例自动搜索、创建测试代码、构建测试套件方法等内容,需要的朋友可以参考下
    2015-04-04

最新评论