Django settings源码解析

Django settings源码

Django中有两个配置文件

局部配置:配置文件settings.py,即项目同名文件夹下的settings.py文件

全局配置:django内部全局的配置文件settings.py,需要导入才能看到

from django.conf import settings # 是一个对象,单例模式
from django.conf import global_settings  # 真正的默认配置文件

特点:

先加载全局配置,再加载局部配置,以局部优先

源码解析

点进settings文件中

发现settings是LazySettings的实例化对象

点击LazySettings到定义的地方

os.environ 相当于是一个全局的字典,只要在项目当中通过os.environ都可以拿到这个字典,这里是从这个字典中取一个ENVIRONMENT_VARIABLE,是局部settings文件的路劲

再点进DJANGO_SETTINGS_MODULE看看是什么东西

原来是从全局拿一个DJANGO_SETTINGS_MODULE值

但是这个值在什么时候设置的呢,Django一旦启动就会去查找settings文件

而Django的启动文件又是manage.py,我们去manage.py中去看看

manage.py中看到了这个

这个x相当于字典的赋值,这里的值就是项目中我们可以进行配置的settings文件的路径

然后继续看LazySettings类

这里实例化了一个对象,并且把拿到的settings_module传了进去,及"Mysite.settings"被传进去了

来到下面的Settings类

看到有一个global_settings,点进去看看是什么

可以发现,global_settings文件是Django系统默认的配置文件,所有的配置都在这里

回到Settings类

总结:

先是将项目路径settings文件设置环境变量

然后在django项目初始化创建一个settings文件对象

先是将 from django.conf import global_settings中的所有变量名称用dir提取出来

变成setting对象的属性

根据设置的环境变量将项目的setting文件

用importlib.import_module将其导入,然后用dir函数提取大写字母变量将其赋值给setting对象

如果变量在项目的配置文件中配置了就把对应的属性更新,如果没有配置就使用系统的默认值

猜你喜欢

转载自www.cnblogs.com/kai-/p/12168978.html