Django session源码剖析

"""
1.django其实有两个配置文件
    一个是暴露给用户可以自定义的配置文件
        项目根目录下的settings.py
    一个是项目默认的配置文件
        当用户不做任何配置的时候自动加载默认配置
2.配置文件变量名必须是大写
"""
疑问:为什么当用户配置了就使用用户配置的 不配置就是要默认的
from django.conf import settings

settings = LazySettings()

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "day05.settings")
ENVIRONMENT_VARIABLE = "DJANGO_SETTINGS_MODULE"
class LazySettings(LazyObject):
    def _setup(self, name=None):
        # os.environ看成是一个全局大字典      'day05.settings'
        settings_module = os.environ.get(ENVIRONMENT_VARIABLE)
        self._wrapped = Settings(settings_module)  # Settings('day05.settings')
 
class Settings(object):
    def __init__(self, settings_module):  # 'day05.settings'
        for setting in dir(global_settings):  # 获取全局配置文件里面所有的变量名
            if setting.isupper():  # 校验是否是纯大写
                setattr(self, setting, getattr(global_settings, setting))
                # 给Settings对象添加全局配置文件中所有的配置信息
        
        self.SETTINGS_MODULE = settings_module  # 'day05.settings'
        mod = importlib.import_module(self.SETTINGS_MODULE)
        # from day05 import settings  # 导入暴露给用户的自定义配置文件
        for setting in dir(mod):
            if setting.isupper():
                setting_value = getattr(mod, setting)
                setattr(self, setting, setting_value)

 

posted @ 2021-06-11 15:57  Palpitate~  阅读(52)  评论(0编辑  收藏  举报