1. 程式人生 > 程式設計 >Django 設定多環境配置檔案載入問題

Django 設定多環境配置檔案載入問題

在上篇文章給大家介紹過Django 多環境配置詳解,感興趣的朋友可以點選查閱,今天繼續給大家介紹django 多環境配置的相關內容,本文重點給大家介紹Django 設定多環境配置檔案載入的相關知識,一起看看吧。

起步

通常,針對不同的開發環境,需要不同的配置保證程式可執行且不干擾。單個 settings.py 檔案就很難滿足需求,需要將他拆分為多個檔案,根據特定環境載入不同的配置檔案。一種簡單的劃分就是分為 4 個檔案:

__init__.py
base.py
dev.py
prod.py

基本結構

一個初始的 Django 專案目錄結構如下:

mysite/
 |-- mysite/
 | |-- __init__.py
 | |-- settings.py
 | |-- urls.py
 | +-- wsgi.py
 +-- manage.py

這時候要做的就是建立一個名為 settings 的資料夾,將 settings.py 重新命名為 base.py 並放入資料夾內:

mysite/
 |-- mysite/
 | |-- __init__.py
 | |-- settings/  <-- 新建的資料夾
 | | |-- __init__.py <--
 | | |-- base.py <-- 舊的 settings.py
 | | |-- cli.py <-- 根據不同環境而新增的配置檔案
 | | |-- dev.py
 | | +-- prod.py
 | |-- urls.py
 | +-- wsgi.py
 +-- manage.py

base.py 顧名思義,它將成為所有環境的通用配置,擴充套件的配置檔案需要將 base.py 匯入:

# settings/dev.py
from .base import *

DEBUG = True

INSTALLED_APPS += [
 'debug_toolbar',]
...

讓配置檔案生效

要使配置檔案生效,需要讓 Django 知道我們要使用哪個配置檔案,一種方式就是在命令列中傳遞這個 --settings=mysite.settings.dev 引數,如:

python manage.py runserver --settings=mysite.settings.dev
python manage.py runserver --settings=mysite.settings.prod
python manage.py migrate --settings=mysite.settings.prod

如果不希望每次指令都傳遞 --settings 引數,也可以通過修改 manage.py 檔案實現使用不同的配置檔案:

# manage.py
import os
import sys
if __name__ == "__main__":
 os.environ.setdefault("DJANGO_SETTINGS_MODULE","mysite.settings.dev") # 修改這個位置
 ...

在伺服器上指定設定

生產環境下一般不會使用 runserver 指令執行,大多是通過 uwsgi 方式執行,修改 mysite/wsgi.py :

import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE","mysite.settings.prod")
application = get_wsgi_application()

通過修改 DJANGO_SETTINGS_MODULE 環境變數指向所需的配置檔案。

下面看下django settings多環境配置

通常我們會把本地、線上的配置拆分,django不同環境的配置可如下:

1.在settings.py同級目錄新增settings資料夾

2.把settings.py移到settings資料夾內,並重命名為base.py

3.新增dev.py,prod.py到settings資料夾

Django 設定多環境配置檔案載入問題

4.base.py中的根目錄,要改成:

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(os.path.join(__file__,os.pardir))))

說明:

1)一些公共配置,放在base.py中。其他因環境而不同的配置,加到local.py/prod.py中

2)dev.py/prod.py,需要把base.py中的配置匯入

from .base import *
DEBUG = True
#其他配置

3)啟動服務時,用--setings指定配置

python manage.py runserver --settings=back-server.settings.dev

正式環境用uwsgi部署,則配置環境變數:DJANGO_SETTINGS_MODULE=back-server.settings.prod

總結

到此這篇關於Django 設定多環境配置檔案載入的文章就介紹到這了,更多相關django 配置檔案載入內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!