码迷,mamicode.com
首页 > 其他好文 > 详细

Django settings源码解析

时间:2020-01-08 22:44:27      阅读:74      评论:0      收藏:0      [点我收藏+]

标签:module   dir   tin   django   ima   初始   img   info   更新   

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源码解析

标签:module   dir   tin   django   ima   初始   img   info   更新   

原文地址:https://www.cnblogs.com/kai-/p/12168978.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!