1. 程式人生 > >Python3 - setting的預設配置和使用者配置讀取

Python3 - setting的預設配置和使用者配置讀取

目錄

一、需求分析

二、實現思路

2-1 實現目錄

2-2 執行檔案 - 環境變數配置、匯入settings屬性

2-3 conf資料夾__init__.py檔案 - 寫入setting類、例項化放入屬性的setting物件

2-4 配置檔案 - globalsetting.py 、setting.py


一、需求分析

  1. 存在內建setting檔案 - conf/globalsetting.py
  2. 存在使用者自配setting檔案 - usersetting/setting.py
  3. 若不存在同名屬性,則使用預設setting檔案內屬性
  4. 若存在同名屬性,優先使用使用者檔案

二、實現思路

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