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)