Django settings源码解析

Posted kai-

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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对象

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

以上是关于Django settings源码解析的主要内容,如果未能解决你的问题,请参考以下文章

Django源码解析:启动程序

django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_INDEX_TABLESPACE的解决办法(转)(代码片段

django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_INDEX_TABLESPACE的解决办法(转)(代码片段

django

Django APIView源码解析

Django-Filter源码解析一