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è)置相應(yīng)的環(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 文件。這種方式更加直觀,但可能會導(dǎo)致更多的文件管理。
創(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', # 你的應(yīng)用 '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-10Python報錯ImportError:?IProgress?not?found.?Please?update
在使用Jupyter Notebook或JupyterLab進行交互式編程時,我們可能會遇到各種導(dǎo)入錯誤,本文就來介紹一下Python報錯ImportError:?IProgress?not?found.?Please?update?jupyter?and?ipywidgets解決,感興趣的可以了解一下2024-06-06