1. 程式人生 > 其它 >Django 3.0拆分settings檔案

Django 3.0拆分settings檔案

需求

隨著專案的發展,經常需要對專案進行開發測試,這時的settings配置需要經常修改。為了減少修改,專注業務,所以拆分settings

具體實現

  • 將原settings更名為base
  • 在project下新建名為settings的資料夾
  • 將base.py放入、新建空的__init__.py、新建dev_settings.py表示開發測試期間所用的配置、新建pro_settings.py表示專案上線後所使用的配置
  • 修改base.py的BASE_DIR,如果不改,django將找不到專案目錄
# BASE_DIR = Path(__file__).resolve().parent.parent    # 原內容
BASE_DIR = Path(__file__).resolve().parent.parent.parent #拆分settings後需要新曾一個`.parent`
  • 修改wsgi.py,該檔案為uwsgi/gunicorn所用的專案入口檔案
# os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'PhoneProject.settings') # 原內容
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'PhoneProject.settings.product_settings')
  • 修改manage.py,該檔案為專案初始化時命令列的入口檔案,比如執行migrate之類的命令時
# os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'PhoneProject.settings') #原內容
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'PhoneProject.settings.product_settings')
  • 此時的專案目錄大致如下

本地開發測試期間,配置pycharm為開發所用settings

  • 修改如下圖
  • manage.py也需要修改,難免在本地會執行一些makemigrations
# os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'PhoneProject.settings') #原內容
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'PhoneProject.settings.dev_settings')
  • python console的設定

我拆分的內容

  • 主要為資料庫配置
    dev_settings.py:
from .base import *

DEBUG = True

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
    }
}

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'xxxxx',
        'USER': 'xxxxxx',
        'PASSWORD': 'xxxxxxx',
        'HOST': '192.168.131.128',
        'PORT': 3306,
        'CONN_MAX_AGE': 5 * 60,
        'OPTIONS': {'charset': 'utf8mb4'}
    }
}

product_settings.py:

from .base import *

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'xxxxx',
        'USER': 'xxxxxxxx',
        'PASSWORD': 'xxxxxxxxxx',
        'HOST': 'xx.xx.xx.xx',
        'PORT': 3306,
        'CONN_MAX_AGE': 5 * 60,
        'OPTIONS': {'charset': 'utf8mb4'}
    }
}

CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:8379/1",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
            "PASSWORD":"xxxxxxxx",
        },
    }
}