admin组件详解
admin组件详解
先根据admin组件启动流程复习下django项目启动至请求过来发生的事
1将admin组件注册进app
2django项目启动
3在运行到定制的admin时执行其下面的apps文件中类下面ready函数在项目启动时就执行每个app下面的admin文件
4当用户发送请求进来首先经过wsgi处理
5再运行中间件中的各个组件对请求进行处理
6在url中找到对应的视图函数并执行返回一个response对象
7返回对象再经过中间件处理(此时执行顺序是从后往前)
流程
知识点
1、django admin利用的是python独有的单例模式来调用的再python中每一个py文件的执行都会生成一个pyc的文件,当下次再调用时,并不会在执行一次py文件, 而是拿到先前生pyc文件的空间中的数据。
2、 改写方法指定app启动时,执行每个app目录下的stark文件
def ready(self):
autodiscover_modules('stark')
3通过查看源码admin中的注册方法通过site调用,site即一个文件类中产生的单例对象,新建文件定义一个生成site对象的方法,定义register方法
class StarkSite(object):
def __init__(self, name='admin'):
self._registry = {} #记录注册的model类
def register(self, model, admin_class=None, **options):
if not admin_class:
admin_class = ModelStark # 配置类
self._registry[model] = admin_class(model)
4model注册进此时应该生成对应的url,每张表都应该有自己独有的url,url对应着表中数据的增删改查,那么设计url尤为重要,此时我们采用url分发的方法,一级路由由表名进行命名,二级路由另外写个类,用来调用(因为site是单例,如果写在一个类里面,则每个url都需要生成4个url,代码重复,应该在用户访问某张表的时候生成对应的增删改查路由)
def get_urls(self):
temp = []
for model_class, config_obj in self._registry.items():
print("===>", model_class, config_obj)
model_name = model_class._meta.model_name
app_label = model_class._meta.app_label
print("===>", app_label, model_name)
temp.append(url(r'^%s/%s/' % (app_label, model_name),config_obj.urls))
5、config_obj是配置类对象,二级路由放入配置类中,在用户注册时,如果有自己的配置类则用自己的 ,没有则用默认的
def get_urls(self):
temp=[
url("^$",self.list_view,name="%s_%s_list"%(self.app_model_name)),
url("^add/$",self.add_view,name="%s_%s_add"%(self.app_model_name)),
url("^(\d+)/change/$",self.change_view,name="%s_%s_change"% (self.app_model_name)),
url("^(\d+)/delete/$",self.delete_view,name="%s_%s_delete"%(self.app_model_name)),
]
temp.extend(self.extra_urls())
return temp
@property #此装饰器的作用是让方法变成可以像属性一样调用
def urls(self):
return self.get_urls(),None,None
6在装饰类下定义增删改查4个视图方法
流程图
>
至于增删改查视图中的方法就步过介绍了,自定义admin组件的基本逻辑就是这样
admin组件详解的更多相关文章
- Android中Intent组件详解
Intent是不同组件之间相互通讯的纽带,封装了不同组件之间通讯的条件.Intent本身是定义为一个类别(Class),一个Intent对象表达一个目的(Goal)或期望(Expectation),叙 ...
- Android笔记——四大组件详解与总结
android四大组件分别为activity.service.content provider.broadcast receiver. ------------------------------- ...
- vue.js基础知识篇(6):组件详解
第11章:组件详解 组件是Vue.js最推崇也最强大的功能之一,核心目标是可重用性. 我们把组件代码按照template.style.script的拆分方式,放置到对应的.vue文件中. 1.注册 V ...
- Echars 6大公共组件详解
Echars 六大组件详解 : title tooltip toolbox legend dataZoom visualMap 一.title标题详解 myTitleStyle = { color ...
- Angular6 学习笔记——组件详解之组件通讯
angular6.x系列的学习笔记记录,仍在不断完善中,学习地址: https://www.angular.cn/guide/template-syntax http://www.ngfans.net ...
- Angular6 学习笔记——组件详解之模板语法
angular6.x系列的学习笔记记录,仍在不断完善中,学习地址: https://www.angular.cn/guide/template-syntax http://www.ngfans.net ...
- OpenStack各组件详解和通信流程
一.openstack由来 openstack最早由美国国家航空航天局NASA研发的Nova和Rackspace研发的swift组成.后来以apache许可证授权,旨在为公共及私有云平台建设.open ...
- Tomcat系列之服务器的安装与配置以及各组件详解
Tomcat系列之服务器的安装与配置以及各组件详解 大纲 一.前言 二.安装与配置Tomcat 三.Tomcat 目录的结构 四.Tomcat 配置文件 注,本文的测试的操作系统为CentOS 6.4 ...
- Logstash组件详解(input、codec、filter、output)
logstash组件详解 logstash的概念及特点. 概念:logstash是一个数据采集.加工处理以及传输(输出)的工具. 特点: - 所有类型的数据集中处理 - 不同模式和格式数据的正常化 - ...
随机推荐
- Linux下C高手成长过程----经典书籍推荐
http://www.cnblogs.com/shanzhizi/archive/2012/07/10/2585357.html
- Web服务器进程连接数和请求连接数
1.查看Web服务器进程连接数: netstat -antp | grep 80 | grep ESTABLISHED -c 2.查看Web服务器的并发请求数及其TCP连接状态: netstat -n ...
- 【数学】【P5076】 Tweetuzki 爱整除
Description 对于一个数 \(k\),找到任意一个 \(x\),满足 \(0~\leq~k~\leq~x~\leq~10^{18}\) 且对于任意一个 \(x\) 进制数,把该数字各数位上的 ...
- 【神仙题】【CF28D】 Don't fear, DravDe is kind
传送门 Description 一个有N辆卡车的车队从城市Z驶向城市3,来到了一条叫做"恐惧隧道"的隧道.在卡车司机中,有传言说怪物DravDe在那条隧道里搜寻司机.有些司机害怕先 ...
- Extjs treePanel过滤查询功能【转】
Extjs4.2中,对于treeStore中未实现filterBy函数进行实现,treestore并未继承与Ext.data.Store,对于treePanel的过滤查询功能,可有以下两种实现思路: ...
- PID控制算法的C语言实现六 抗积分饱和的PID控制算法C语言实现
所谓的积分饱和现象是指如果系统存在一个方向的偏差,PID控制器的输出由于积分作用的不断累加而加大,从而导致执行机构达到极限位置,若控制器输出U(k)继续增大,执行器开度不可能再增大,此时计算机输出控制 ...
- 洛谷P1062 数列
题目描述 给定一个正整数k(3≤k≤15),把所有k的方幂及所有有限个互不相等的k的方幂之和构成一个递增的序列,例如,当k=3时,这个序列是: 1,3,4,9,10,12,13,… (该序列实际上就是 ...
- Linux安全之SYN攻击原理及处理
TCP自从1974年被发明出来之后,历经30多年发展,目前成为最重要的互联网基础协议,但TCP协议中也存在一些缺陷. SYN攻击就是利用TCP协议的缺陷,来导致系统服务停止正常的响应. SYN攻击原理 ...
- 数据压缩算法之哈夫曼编码(HUFFMAN)的实现
HUFFMAN编码可以很有效的压缩数据,通常可以压缩20%到90%的空间(算法导论).具体的压缩率取决于数据的特性(词频).如果采取标准的语料库进行编码,一般可以得到比较满意的编码结果(对不同文件产生 ...
- STL在算法比赛中简单应用
STL基础 和 简单的贪心问题 STL(Standard Template Library) 即 标准模板库. 它包含了诸多在计算机科学领域里所常用的基本数据结构和算法.这些数据结构可以与标准算法一起 ...