Django中的配置除了用戶的配置之外,django還有一個默認的配置,當用戶的某個配置沒有設置時,Django會從默認配置裏找python
接下來,我就模擬一下這種配置django
# 假設這是默認配置 DEBUG = None TIME_ZONE = 'America/Chicago' USE_TZ = False
# 這就是用戶配置 DEBUG = True TIME_ZONE = 'Asia/Shanghai' USE_TZ = False # 比起默認配置多了一個 ABC='123'
# 至關於啓動文件 import os # os.environ.setdefault(a,b):以字典的格式放入環境變量中 # {'USER_SETTING':'usersetting.setting'} # usersetting.setting:是用戶的配置文件的路徑 os.environ.setdefault('USER_SETTING', 'usersetting.setting') from conf import setting print(setting.DEBUG)
from conf import global_setting import os import importlib class MySetting(): # dir:返回模塊的屬性列表 def __init__(self): # 循環得到global_setting的配置名 for setting in dir(global_setting): if setting.isupper(): # 並把配置名和對應值賦給MySetting()的對象 setattr(self, setting, getattr(global_setting, setting)) # 從環境變量中得到用戶配置的路徑字符串 settings_module = os.environ.get('USER_SETTING') # importlib模塊支持傳遞字符串來導入模塊 # 經過importlib模塊和用戶配置的路徑字符串,咱們能夠導入用戶的配置文件mod mod = importlib.import_module(settings_module) # 以後的操做和上面同樣 # 用戶中已有的配置會覆蓋默認配置 for setting in dir(mod): if setting.isupper(): setattr(self, setting, getattr(mod, setting)) setting = MySetting()