1. 程式人生 > >Django中settings設計模式(單例模式)

Django中settings設計模式(單例模式)

實例化 用戶 就是 auto 技術 軟件設計 img 文件的 單例

配置文件:

需求:配置文件,默認配置和手動配置分開,參考django的配置文件方案,默認配置文件放在項目容器內部,只讓用戶做常用配置。

/bin/settings.py(手動配置)

PLUGIN_ITEMS = {
    "nic": "src.plugins.nic.Nic",
    "disk": "src.plugins.disk.Disk",
}
 
API = "http://127.0.0.1:8000/api/server.html"

/lib/config/global_settings.py(默認配置)

TEST = True
 
NAME = "baishuchao"

/lib/config/init.py(/lib/config/目錄的初始化文件)

import sys,os
import importlib
from . import global_settings
 
class Settings():
    """
    global_settings,配置獲取
    settings.py,配置獲取
    """
    def __init__(self):
 
        for item in dir(global_settings):
            if item.isupper():
                k = item
                v = getattr(global_settings,item)
                setattr(self,k,v)
 
        setting_path = os.environ.get('AUTO_CLIENT_SETTINGS')
        md_settings = importlib.import_module(setting_path)
        for item in dir(md_settings):
            if item.isupper():
                k=item
                v=getattr(md_settings,item)
                setattr(self,k,v)
 
settings = Settings()
# 配置文件直接從這個settings對象拿

/bin/run.py(啟動文件,打印配置內容)

import sys
import os
import importlib
import requests
 
BASEDIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(BASEDIR)
 
os.environ['AUTO_CLIENT_SETTINGS']="conf.settings"
from lib.config import settings
 
print(settings.NAME)
print(settings.TEST)

目錄結構:

技術分享圖片

註意:引入配置這種方式在軟件設計模式裏叫單例模式,因為引入兩次也相當於一次

  1. 導入配置,from lib.config import settings ,這裏的lib.config是一個文件夾,從文件夾導入settings??? 因為:如果導入文件夾的話,默認導入文件夾下面的__init__.py文件,所以import settings就是__init__.py文件裏面的settings。

  2. settings是一個導入配置文件的對象,init.py文件有一個獲取配置的類,默認配置和手動配置,實例化一個settings對象,這個對象就包含了所有的配置。

Django中settings設計模式(單例模式)