模擬Django的settings配置

模擬Django的settings配置

Django中的配置除了用戶的配置之外,django還有一個默認的配置,當用戶的某個配置沒有設置時,Django會從默認配置裏找python

接下來,我就模擬一下這種配置django

項目格式

global_setting.py

# 假設這是默認配置
DEBUG = None

TIME_ZONE = 'America/Chicago'

USE_TZ = False

setting.py

# 這就是用戶配置
DEBUG = True

TIME_ZONE = 'Asia/Shanghai'

USE_TZ = False

# 比起默認配置多了一個
ABC='123'

test.py

# 至關於啓動文件
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)

init.py

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()
相關文章
相關標籤/搜索