admin源码分析
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源码分析的更多相关文章
- Django——admin源码分析
在Django中,如果我们新建一个项目,只要在admin.py文件中注册,就可以对其相应的文件进行增删改查操作. 而我们在路由系统中只看到了一条信息:url(r'^admin/', admin.sit ...
- Django之admin的使用及源码分析
一.admin组件使用 Django本身提供了基于 web 的管理工具.其管理工具是django.contrib的一部分,可在settings.py中的 INSTALLED_APPS 看到: INST ...
- MyBatis源码分析-SQL语句执行的完整流程
MyBatis 是支持定制化 SQL.存储过程以及高级映射的优秀的持久层框架.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可以对配置和原生Map使用简 ...
- Tomcat源码分析
前言: 本文是我阅读了TOMCAT源码后的一些心得. 主要是讲解TOMCAT的系统框架, 以及启动流程.若有错漏之处,敬请批评指教! 建议: 毕竟TOMCAT的框架还是比较复杂的, 单是从文字上理解, ...
- Solr初始化源码分析-Solr初始化与启动
用solr做项目已经有一年有余,但都是使用层面,只是利用solr现有机制,修改参数,然后监控调优,从没有对solr进行源码级别的研究.但是,最近手头的一个项目,让我感觉必须把solrn内部原理和扩展机 ...
- Orchard源码分析(1):Orchard架构
本文主要参考官方文档"How Orchard works"以及Orchardch上的翻译. 源码分析应该做到庖丁解牛,而不是以管窥豹或瞎子摸象.所以先对Orchard架构有 ...
- Beego源码分析(转)
摘要 beego 是 @astaxie 开发的重量级Go语言Web框架.它有标准的MVC模式,完善的功能模块,和优异的调试和开发模式等特点.并且beego在国内企业用户较多,社区发达和Q群,文档齐全, ...
- YII框架源码分析(百度PHP大牛创作-原版-无广告无水印)
YII 框架源码分析 百度联盟事业部——黄银锋 目 录 1. 引言 3 1.1.Yii 简介 3 1.2.本文内容与结构 3 2.组件化与模块化 4 2.1.框架加载和运行流程 4 ...
- Solr4.8.0源码分析(25)之SolrCloud的Split流程
Solr4.8.0源码分析(25)之SolrCloud的Split流程(一) 题记:昨天有位网友问我SolrCloud的split的机制是如何的,这个还真不知道,所以今天抽空去看了Split的原理,大 ...
随机推荐
- nsight system
https://developer.nvidia.com/nsight-systems pc nv家 看时序的工具 链接里面有分许数据的教学视频 dx12的多线程渲染 卡在vsync上
- docker换源
方案一 修改或新增 /etc/docker/daemon.json # vi /etc/docker/daemon.json { "registry-mirrors": [&quo ...
- POJ-1661-Help Jimmy(DP, 递推)
链接: https://vjudge.net/problem/POJ-1661 题意: "Help Jimmy" 是在下图所示的场景上完成的游戏. 场景中包括多个长度和高度各不相同 ...
- Comet OJ - Contest #3 (A 比赛 加强版)二分答案
考试的时候同届神犇 JZYshurak 出了一个 n=$10^5$ 的数据加强版. 刚开始没什么思路,但是忽然想到这个可以转成二分判定+暴力枚举的模型. 二分 ans, 使得大于等于 ans 的值小 ...
- webpack+vue+Eslint+husky+lint-staged 统一项目编码规范
一. Eslint: 为什么我们要在项目中使用ESLint ESLint可以校验我们写的代码,给代码定义一个规范,项目里的代码必须按照这个规范写. 加入ESLint有非常多的好处,比如说可以帮助我们避 ...
- re匹配 [\s\S][\w\W]的使用.
本来想提取一个字符串写了一堆正则都提取不出来. 因为有特殊字符 后来使用 [\s\S]* 或 [\w\W]* 匹配出来. \s 空白字符 [ \t\n\r\f\v] \S 非空白字符 相当于 [^ \ ...
- postgresql 一些操作
postgresql 对sql语句敏感的. 所以尽量标准化输入 #############查看版本信息 ############ 1.查看客户端版本 psql --version 1 2.查看服务器端 ...
- gzip 的使用
bogon:Desktop macname$ mkdir testdir bogon:Desktop macname$ cd testdir/ bogon:testdir macname$ ls bo ...
- centos6中安装VMware Tools
使用的是centos6.8,其他6版本方法大致相同. 1 .工具/原料1)安装过虚拟机软件的计算机2)linux操作系统 3)虚拟机配置VMware tools文件, 点击工具栏上的[虚拟机],然后选 ...
- JavaWeb_(Mybatis框架)输入和输出参数_五
系列博文: JavaWeb_(Mybatis框架)JDBC操作数据库和Mybatis框架操作数据库区别_一 传送门 JavaWeb_(Mybatis框架)使用Mybatis对表进行增.删.改.查操作_ ...