Django配置多個環(huán)境的MySQL數(shù)據(jù)庫的完整指南
在 Django 項目中配置多個環(huán)境的 MySQL 數(shù)據(jù)庫是一個常見的需求,特別是在開發(fā)、測試和生產(chǎn)環(huán)境中使用不同的數(shù)據(jù)庫配置。你可以通過在 settings.py 文件中使用條件語句或環(huán)境變量來實現(xiàn)這一點。
1. 使用環(huán)境變量
使用環(huán)境變量是一種靈活且安全的方式來配置多個環(huán)境的數(shù)據(jù)庫。你可以使用 django-environ 庫來簡化環(huán)境變量的管理。
安裝 django-environ
首先,安裝 django-environ 庫:
pip install django-environ
配置 settings.py
編輯 settings.py 文件,使用 environ 來讀取環(huán)境變量:
# myproject/settings.py
import environ
# 初始化環(huán)境變量
env = environ.Env()
environ.Env.read_env()
# 數(shù)據(jù)庫配置
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'])
設(shè)置環(huán)境變量
在不同的環(huán)境中設(shè)置相應的環(huán)境變量。你可以在 .env 文件中設(shè)置這些變量,或者在操作系統(tǒng)中直接設(shè)置。
.env 文件示例
在項目根目錄下創(chuàng)建一個 .env 文件,并添加以下內(nèi)容:
# 開發(fā)環(huán)境 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 # 測試環(huán)境 # 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 # 生產(chǎn)環(huán)境 # DEBUG=False # SECRET_KEY=your_secret_key_for_production # ALLOWED_HOSTS=yourdomain.com # DATABASE_URL=mysql://root:password@10.177.111.228:3306/ostp
操作系統(tǒng)環(huán)境變量
你也可以在操作系統(tǒng)的環(huán)境變量中設(shè)置這些值。例如,在 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腳本中設(shè)置了
@echo off chcp 65001 echo "設(shè)置數(shù)據(jù)庫運行環(huán)境為開發(fā)環(huán)境" 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 文件
另一種方法是為每個環(huán)境創(chuàng)建一個單獨的 settings 文件。這種方式更加直觀,但可能會導致更多的文件管理。
創(chuàng)建多個 settings 文件
在 myproject 目錄下創(chuàng)建以下文件:
- settings_base.py:基礎(chǔ)配置
- settings_dev.py:開發(fā)環(huán)境配置
- settings_test.py:測試環(huán)境配置
- settings_prod.py:生產(chǎn)環(huán)境配置
settings_base.py
# myproject/settings_base.py
import os
# 基礎(chǔ)配置
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'
# 靜態(tài)文件配置
STATIC_URL = '/static/'
settings_dev.py
# myproject/settings_dev.py
from .settings_base import *
# 開發(fā)環(huán)境配置
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 *
# 測試環(huán)境配置
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 *
# 生產(chǎn)環(huán)境配置
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') # 根據(jù)需要切換環(huán)境
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') # 根據(jù)需要切換環(huán)境
application = get_wsgi_application()
總結(jié)
通過使用環(huán)境變量或多個 settings 文件,你可以在 Django 項目中輕松地配置多個環(huán)境的 MySQL 數(shù)據(jù)庫。選擇哪種方法取決于你的具體需求和團隊的工作流程。使用環(huán)境變量可以提供更好的靈活性和安全性,而使用多個 settings 文件則更加直觀和易于管理。
以上就是Django配置多個環(huán)境的MySQL數(shù)據(jù)庫的完整指南的詳細內(nèi)容,更多關(guān)于Django配置MySQL的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python編程實現(xiàn)下載器自動爬取采集B站彈幕示例
這篇文章主要介紹了使用Python編程來實現(xiàn)一個下載器可以自動爬取采集B站彈幕的示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪2021-10-10
Python報錯ImportError:?IProgress?not?found.?Please?update
在使用Jupyter Notebook或JupyterLab進行交互式編程時,我們可能會遇到各種導入錯誤,本文就來介紹一下Python報錯ImportError:?IProgress?not?found.?Please?update?jupyter?and?ipywidgets解決,感興趣的可以了解一下2024-06-06

