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源码解析的更多相关文章

  1. Django对中间件的调用思想、csrf中间件详细介绍、Django settings源码剖析、Django的Auth模块

    目录 使用Django对中间件的调用思想完成自己的功能 功能要求 importlib模块介绍 功能的实现 csrf中间件详细介绍 跨站请求伪造 Django csrf中间件 form表单 ajax c ...

  2. Django学习——Django settings 源码、模板语法之传值、模板语法之获取值、模板语法之过滤器、模板语法之标签、自定义过滤器、标签、inclusion_tag、模板的导入、模板的继承

    Django settings 源码 """ 1.django其实有两个配置文件 一个是暴露给用户可以自定义的配置文件 项目根目录下的settings.py 一个是项目默 ...

  3. django -admin 源码解析

    admin源码解析 单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当你希望在整个系统中,某个类只能出现一个实例时,单 ...

  4. Django APIView源码解析

    APIView使用:luffy项目中关于APIView的使用 在Django之 CBV和FBV中,我们是分析的from django.views import View下的执行流程,以下是代码 fro ...

  5. Django的View(视图)-settings源码的解析-模板层-模板语法

    FBV与CBV 视图函数并不只是指函数,也可以是类 FBV:基于函数的视图,类似面向函数式编程 CBV:基于类的视图,类似面向对象编程 研究解析render源码: render:返回html页面:并且 ...

  6. django 之csrf、auth模块及settings源码、插拔式设计

    目录 基于django中间件拷贝思想 跨站请求伪造简介 跨站请求伪造解决思路 方式1:form表单发post请求解决方法 方式2:ajax发post请求解决方法 csrf相关的两个装饰器 csrf装饰 ...

  7. Django-Filter源码解析一

    Django Filter源码解析 最近在看Django-FIlter项目的源码,学习一下别人的开发思想: 整体介绍 首先,我从其中一个测试用例作为入口,开始了debug之路,一点一点的断点,分析它的 ...

  8. django_settings源码解析

    目录 配置文件插拔式设计: 简单版: 复杂版 importlib 与`__import__的区别: 配置文件插拔式设计: 项目配置文件插拔式设计: 基于django settings源码实现自己项目配 ...

  9. Django生命周期 URL ----> CBV 源码解析-------------- 及rest_framework APIView 源码流程解析

    一.一个请求来到Django 的生命周期   FBV 不讨论 CBV: 请求被代理转发到uwsgi: 开始Django的流程: 首先经过中间件process_request (session等) 然后 ...

随机推荐

  1. disconf---分布式配置管理平台的搭建(linux版本)

    一.获取disconf的代码 地址:https://github.com/knightliao/disconf 二.搭建基础服务 ①redis,mysql,zookeeper在博主的其他博文中有相应搭 ...

  2. https://www.cnblogs.com/lfs2640666960/p/8529115.html

    https://www.cnblogs.com/lfs2640666960/p/8529115.html

  3. python练习:编写一个程序,要求用户输入一个整数,然后输出两个整数root和pwr,满足0<pwr<6,并且root**pwr等于用户输入的整数。如果不存在这样一对整数,则输入一条消息进行说明。

    python练习:编写一个程序,要求用户输入一个整数,然后输出两个整数root和pwr,满足0<pwr<6,并且root**pwr等于用户输入的整数.如果不存在这样一对整数,则输入一条消息 ...

  4. GCD: 求两数最大公因数算法【欧几里得法】原理的个人理解 (80%图片讲解!)

    那么,求 a,b 的最大公因数就是求最大的,能均分a,b的块!  

  5. 洛谷 P3808 【模板】AC自动机(简单版) (AC自动机优化板子)

    题中有一个坑点,就是模式串可以相同,并且全部计数. #include <bits/stdc++.h> using namespace std; const int maxn=1e6+10; ...

  6. WLC-WLC升级(以2504为例)

    1.WLC升级需要按照升级路径来操作,低版本到高版本的跨度太大,往往需要升级到中间版本,有时候还涉及到FUS. 2.我们升级,一般使用的笔记本上运行的TFTP/FTP  server. 需要注意:笔记 ...

  7. 【转】shell处理mysql增删改查

    这几天做一个任务,比对两个数据表中的数据,昨天用PHP写了一个版本,但考虑到有的机器没有php或者php没有编译mysql扩展,就无法使用mysql系列的函数,脚本就无效了,今天写个shell版本的, ...

  8. 二分(求l-r中的平方数)

    题目描述 多次查询[l,r]范围内的完全平方数个数 定义整数x为完全平方数当且仅当可以找到整数y使得y*y=x 输入描述:第一行一个数n表示查询次数之后n行每行两个数l,r输出描述:对于每个查询,输出 ...

  9. 【PAT甲级】1045 Favorite Color Stripe (30 分)(DP)

    题意: 输入一个正整数N(<=200),代表颜色总数,接下来输入一个正整数M(<=200),代表喜爱的颜色数量,接着输入M个正整数表示喜爱颜色的编号(同一颜色不会出现两次),接下来输入一个 ...

  10. kafka中常用API的简单JAVA代码

    通过之前<kafka分布式消息队列介绍以及集群安装>的介绍,对kafka有了初步的了解.本文主要讲述java代码中常用的操作. 准备:增加kafka依赖 <dependency> ...