Python3 - setting的預設配置和使用者配置讀取
阿新 • • 發佈:2018-12-29
目錄
2-2 執行檔案 - 環境變數配置、匯入settings屬性
2-3 conf資料夾__init__.py檔案 - 寫入setting類、例項化放入屬性的setting物件
2-4 配置檔案 - globalsetting.py 、setting.py
一、需求分析
- 存在內建setting檔案 - conf/globalsetting.py
- 存在使用者自配setting檔案 - usersetting/setting.py
- 若不存在同名屬性,則使用預設setting檔案內屬性
- 若存在同名屬性,優先使用使用者檔案
二、實現思路
2-1 實現目錄
2-2 執行檔案 - 環境變數配置、匯入settings屬性
import os # 將usersetting.setting存入user_setting屬性內 並存入環境變數 os.environ.setdefault('user_setting', 'usersetting.setting') # 匯入conf資料夾內的__init__內建立的屬性settings from conf import settings print(settings.DEBUG) print(os.environ) # environ({'ALLUSERSPROFILE': 'C:\\ProgramData',……,'USER_SETTING': 'usersetting.setting'}}) print(os.environ.get('user_setting')) # usersetting.setting
2-3 conf資料夾__init__.py檔案 - 寫入setting類、例項化放入屬性的setting物件
import os import importlib from conf import globalsetting class Setting: def __init__(self): ''' 獲取預設全域性設定globalsetting檔案內大寫屬性 ''' print(dir(globalsetting)) # dir() 獲取物件內的所有屬性名 # ['DEBUG', '__builtins__', '__cached__', '__doc__', '__file__', # '__loader__', '__name__', '__package__', '__spec__'] for setting in dir(globalsetting): # 獲取大寫屬性名 if setting.isupper(): # 設定 self 物件內的 setting 屬性的值為 globalsetting 內的 setting # 即,settings物件內的DEBUG屬性為globalsetting的DEBUG setattr(self, setting, getattr(globalsetting, setting)) ''' 獲取使用者檔案內的屬性放入物件內,對預設屬性進行覆蓋 ''' # os.environ 獲取系統環境變數 user_setting = os.environ.get('user_setting') # importlib.import_module 例項化 usersetting\\setting.py檔案為mod物件 mod = importlib.import_module(user_setting) print(mod) # <module 'usersetting.setting' from # 'D:\\python\\video_review\\Django\\day101\\mysetting\\usersetting\\setting.py'> for setting in dir(mod): if setting.isupper(): setattr(self, setting, getattr(mod, setting)) # 例項化物件,用於執行檔案呼叫 settings = Setting()
2-4 配置檔案 - globalsetting.py 、setting.py