zoukankan      html  css  js  c++  java
  • 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对象

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

  • 相关阅读:
    inspector 只读属性
    使用MongoDB
    【Roslyn C#】Runtime环境Unity读取字符串代码
    Unity使用LoadImage 读取byte[]图片时,会出现白边问题
    团队中避免不可维护代码的措施
    Unity点到线段的最短距离
    判断点是否在多边形内部
    Unity 根据前后帧位置自动旋转
    停止Unity在运行时脚本修改重新编译的情况
    KI子线段树 / AKEE SegmentTree
  • 原文地址:https://www.cnblogs.com/kai-/p/12168978.html
Copyright © 2011-2022 走看看