django settings 源码分析

导入settingso模块,进入源码,会发现settings是一个 单例 LazySettings类实例化产生的一个对象,
LazySettings实例化后就会走它内部的_setup函数

importlib模块的作用 : 以字符串的形式导入模块,拿到能够访问该模块名称 空间的名字
module = imporlib.import_module('字符串')

settings配置用户自定义的原理:
项目启动后,会使用os.environ.settdefault('xxx','conf.settings')在os中设置一个全局大字典,放置暴露给用户的settings文件路径
会先加载全局的配置,然后再加载用户配置的,如果用户配置了,会将全局的配置顶掉。
而没有设置的项就会采用默认配置,来实现settings内部用户自定义配置的功能
首先会for循环默认配置,使用dir(全局配置模块) 获得所有该模块下的字符串形式的名称列表,然后对名称进行判断,
因为如果用需要自定义的配置,变量名必须大写,所以经行筛选,将符合要求的配置以键值对的形式使用setattr存入settings对象中
然后从全局大字典,从os中的全局大字典中获取暴露给用户的settings文件路径,使用import_module 将路径以字符串的形式导入模块
然后for循环该模块,获得暴露给用户的配置文件中的所有配置,以键值对的形式存入到settings对象中

实现django中的settings 用户配置了就使用用户自定义的配置的settings,用户没有配置就使用django全局的settings的
导入模块发生的三件事:
1. 创建运行模块的名称空间
2. 创建被导入模块的模块名称空间,并执行该模块所有代码,将产生的名字全部放入该名称空间中
3. 然后在执行文件中产生一个名字,指向被导入模块的名称空间

admin的五大配置参数
当用户没有自定义方法的时候。admin会使用默认的ModelAdmin。当用户自定义了方法,会使用用户自定义的方法
list_display = ['字段名'] 控制在admin页面中展示字段的 (控制展示字段)

list_display_links = [‘字段名’] 在后台筛选时可以被筛选的字段。 (控制跳转字段)

search_fields = [‘字段名’] 查询器,以字段名经行查询,在查询的时候是“或”的关系,(或查询)

list_filter = [‘外键字段名’] 右侧过滤器 在内部添加外键字段,会筛选所对应的数据, (如果有多个外键字段,可以用与查询 挨个筛选,
可以添加多对多的字段,在过滤的时候是“与”的关系 比如先筛选人名,再筛选它写的书,and操作 )

# 批量修改值。在queryset_update(字段名=‘新值’) 可以将选中的字段更改为指定的值
def path_init(self,request,queryset):
queryset.update(price=666)
path_init.short_description = '价格批量修改'
actions = [path_init]

配置类的概念

admin 源码分析
django启动的会依次执行每一个app应用下的admin.py文件
模块在导入的时候会执行__all__方法。当文件被导入的时候。可以被使用的所有名字

# 下方导入的模块,与定义的函数。决定了django每次启动的时候会执行该函数,会去每一个应用下寻找admin.py文件
from django.utils.module_loading import autodiscover_modules
def autodiscover():
autodiscover_modules('admin', register_to=site) # 如果将 'admin' 替换成别的,就会执行别的。

实现单例的几种方式

1.基于classmethod
2.基于装饰器
3.基于元类__call__
4.基于__new__
5.基于模块

admin源码分析的更多相关文章

  1. Django——admin源码分析

    在Django中,如果我们新建一个项目,只要在admin.py文件中注册,就可以对其相应的文件进行增删改查操作. 而我们在路由系统中只看到了一条信息:url(r'^admin/', admin.sit ...

  2. Django之admin的使用及源码分析

    一.admin组件使用 Django本身提供了基于 web 的管理工具.其管理工具是django.contrib的一部分,可在settings.py中的 INSTALLED_APPS 看到: INST ...

  3. MyBatis源码分析-SQL语句执行的完整流程

    MyBatis 是支持定制化 SQL.存储过程以及高级映射的优秀的持久层框架.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可以对配置和原生Map使用简 ...

  4. Tomcat源码分析

    前言: 本文是我阅读了TOMCAT源码后的一些心得. 主要是讲解TOMCAT的系统框架, 以及启动流程.若有错漏之处,敬请批评指教! 建议: 毕竟TOMCAT的框架还是比较复杂的, 单是从文字上理解, ...

  5. Solr初始化源码分析-Solr初始化与启动

    用solr做项目已经有一年有余,但都是使用层面,只是利用solr现有机制,修改参数,然后监控调优,从没有对solr进行源码级别的研究.但是,最近手头的一个项目,让我感觉必须把solrn内部原理和扩展机 ...

  6. Orchard源码分析(1):Orchard架构

      本文主要参考官方文档"How Orchard works"以及Orchardch上的翻译.   源码分析应该做到庖丁解牛,而不是以管窥豹或瞎子摸象.所以先对Orchard架构有 ...

  7. Beego源码分析(转)

    摘要 beego 是 @astaxie 开发的重量级Go语言Web框架.它有标准的MVC模式,完善的功能模块,和优异的调试和开发模式等特点.并且beego在国内企业用户较多,社区发达和Q群,文档齐全, ...

  8. YII框架源码分析(百度PHP大牛创作-原版-无广告无水印)

           YII 框架源码分析    百度联盟事业部——黄银锋 目 录 1. 引言 3 1.1.Yii 简介 3 1.2.本文内容与结构 3 2.组件化与模块化 4 2.1.框架加载和运行流程 4 ...

  9. Solr4.8.0源码分析(25)之SolrCloud的Split流程

    Solr4.8.0源码分析(25)之SolrCloud的Split流程(一) 题记:昨天有位网友问我SolrCloud的split的机制是如何的,这个还真不知道,所以今天抽空去看了Split的原理,大 ...

随机推荐

  1. K3CLOUD 常用数据表

    二.K3 Cloud 开发插件<K3 Cloud 常用数据表整理>一.数据库查询常用表 按 Ctrl+C 复制代码 按 Ctrl+C 复制代码 通过表T_META_OBJECTTYPE的F ...

  2. C指针与数组

    通过指针遍历数组的小把戏 #include<stdio.h> #include<stdlib.h> #include<Windows.h> void main() ...

  3. SQL分表

    一.为什么要水平分表?简而言之,当单表数据量过大时,无法对其进行有效的维护,以及查询速度严重变慢时,我们就需要对其时行水平分表. 二.什么时候需要水平分表?在数据库结构的设计中,需要充分考虑后期数据的 ...

  4. Jquery的toggle()与trigger()方法

    我一直分不清楚toggle()与trigger()两个各自的作用,所以今天抽时间记录一些,以加深印象. 1.toggle() 定义和用法: toggle() 方法切换元素的可见状态.如果被选元素可见, ...

  5. 11、组件注册-使用FactoryBean注册组件

    11.组件注册-使用FactoryBean注册组件 package org.springframework.beans.factory; import org.springframework.lang ...

  6. P4053 [JSOI2007]建筑抢修 堆贪心

    思路:堆贪心 提交:1次 题解: 先按时间\(sort\),然后如果能修就直接扔堆里,不能修取堆顶比一下时间长短,把时间短的扔进堆: #include<cstdio> #include&l ...

  7. window、BOM、 document、 DOM

    window:  顾名思义,窗口,浏览器窗口.是Window构造函数的一个实例对象. 它包含浏览器的一些属性和方法,如screen,location,history,setInterval等. // ...

  8. 利用前端三大件(html+css+js)开发一个简单的“todolist”项目

    一.介绍 todolist,即待办事项.在windows android ios上参考微软家出的那个To-Do应用,大概就是那样的.我这个更简单,功能只有“待办” “已完成”两项,并且是在浏览器打开的 ...

  9. 游览器中javascript的执行过程

    在讲这个问题之前,先来补充几个知识点,如果对此已经比较了解可以直接跳过 大多数游览器的组件构成如图 在最底层的三个组件分别是网络,UI后端和js解释器.作用如下: (1)网络- 用来完成网络调用,例如 ...

  10. Elasticsearch的Search详解

    介绍 ES不是新技术,是将全文检索和数据分析.分布式整合到一起. 基于lucene开发,提供简单的restful api接口.java api接口.其他语言开发接口等. 实现了分布式的搜索引擎和分析引 ...