djanosetting源码初识

在django中settings其实分为两种一种是用户可以进行修改和配置的,一种是不会暴露给用户,当用户对settings进行配置时会使用

用户配置的,当用户没有配置时,使用settings默认的配置

当我们生成jango项目时,会在manage.py文件中自定将暴露给用户的settings 加到全局的大字典中

我们点进settings会发现 生成了一个LazySettings类的单例模式的实例化对象

 

在LazySettings类中获取全局字典中的用户设置settings,并传给一个sttings类:

在settings中开始判断用户是否做了settings设置,没有设置就用settings默认的配置,用户配置了就使用用户已经设置好的

自己模拟jango示例,在测试项目中设置用户setting全局settings:

在将用户settings加入我们设置的全局的字典中,并且在全局的settings的__init__取出后判断用户是否设置了settings,没有设置就用默认的配置

import os
from lib.conf import global_settings
import importlib
class setttings(object):
    def __init__(self):
        for name in dir(global_settings):
            if name.isupper():
                k = name
                v = getattr(global_settings,name)
                setattr(self,k,v)

        moudel_path = os.environ.get('name')
        moudel = importlib.import_module(moudel_path)
        for name in dir(moudel):
            if name.isupper():
                k = name
                v = getattr(moudel,name)
                setattr(self,k,v)

示例验证:

当用户setting设置后打印结果:

当用户没有设置时的打印结果:

 

原文地址:https://www.cnblogs.com/1624413646hxy/p/11279362.html