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组件详解的更多相关文章

  1. Android中Intent组件详解

    Intent是不同组件之间相互通讯的纽带,封装了不同组件之间通讯的条件.Intent本身是定义为一个类别(Class),一个Intent对象表达一个目的(Goal)或期望(Expectation),叙 ...

  2. Android笔记——四大组件详解与总结

     android四大组件分别为activity.service.content provider.broadcast receiver. ------------------------------- ...

  3. vue.js基础知识篇(6):组件详解

    第11章:组件详解 组件是Vue.js最推崇也最强大的功能之一,核心目标是可重用性. 我们把组件代码按照template.style.script的拆分方式,放置到对应的.vue文件中. 1.注册 V ...

  4. Echars 6大公共组件详解

    Echars 六大组件详解 : title  tooltip toolbox legend  dataZoom visualMap 一.title标题详解 myTitleStyle = { color ...

  5. Angular6 学习笔记——组件详解之组件通讯

    angular6.x系列的学习笔记记录,仍在不断完善中,学习地址: https://www.angular.cn/guide/template-syntax http://www.ngfans.net ...

  6. Angular6 学习笔记——组件详解之模板语法

    angular6.x系列的学习笔记记录,仍在不断完善中,学习地址: https://www.angular.cn/guide/template-syntax http://www.ngfans.net ...

  7. OpenStack各组件详解和通信流程

    一.openstack由来 openstack最早由美国国家航空航天局NASA研发的Nova和Rackspace研发的swift组成.后来以apache许可证授权,旨在为公共及私有云平台建设.open ...

  8. Tomcat系列之服务器的安装与配置以及各组件详解

    Tomcat系列之服务器的安装与配置以及各组件详解 大纲 一.前言 二.安装与配置Tomcat 三.Tomcat 目录的结构 四.Tomcat 配置文件 注,本文的测试的操作系统为CentOS 6.4 ...

  9. Logstash组件详解(input、codec、filter、output)

    logstash组件详解 logstash的概念及特点. 概念:logstash是一个数据采集.加工处理以及传输(输出)的工具. 特点: - 所有类型的数据集中处理 - 不同模式和格式数据的正常化 - ...

随机推荐

  1. 【JQuery】文档操作

    一.前言 接着上一章的内容,接着JQuery的学习 二.内容 addClass 向被选元素添加一个或多个类 $(selector).addClass(class) $(selector).addCla ...

  2. BZOJ4104:[Thu Summer Camp 2015]解密运算——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=4104 对于一个长度为N的字符串,我们在字符串的末尾添加一个特殊的字符".".之 ...

  3. 据说要写一个CTSC&APIO的收获

    就不写流水帐了,总的写一下吧.先从最浅显的地方开始——知识.大概被普及了一发带花树,算上自己的考试,还被普及了一发洲阁筛.当然更多的还是对于一些知识的强化,比如:乱搞(这东西真是太重点了啊).DP.数 ...

  4. opencv查找轮廓---cvFindContours && cvDrawCountours 用法及例子

    http://blog.csdn.net/timidsmile/article/details/8519751 环境: vs2008 + opencv2.1 先看,这两个函数的用法(参考 opencv ...

  5. PostgreSQL 传统 hash 分区方法和性能

    背景 除了传统的基于trigger和rule的分区,PostgreSQL 10开始已经内置了分区功能(目前仅支持list和range),使用pg_pathman则支持hash分区. 从性能角度,目前最 ...

  6. linux的进程1:rootfs与linuxrc

    在内核启动的最后阶段启动了三个进程 进程0:进程0其实就是刚才讲过的idle进程,叫空闲进程,也就是死循环.进程1:kernel_init函数就是进程1,这个进程被称为init进程.进程2:kthre ...

  7. css中px em rem vw vh vmax vmin等单位的区别--转载

    px:绝对单位,页面按精确像素展示 em:相对单位,基准点为父节点字体的大小,如果自身定义了font-size按自身来计算(浏览器默认字体是16px),整个页面内1em不是一个固定的值. rem:相对 ...

  8. Maven将java项目打包生成可运行jar

    Maven将java项目打包生成可运行jar Maven插件配置 <plugins> <plugin> <groupId>org.apache.maven.plug ...

  9. 「七天自制PHP框架」应用:JSON生成器

    刚刚开始学做一个WebAPP,数据查询的一般套路是通过一张PHP页面读取数据库,获得列表后“嵌写”在PHP页面中,虽然写法上丑陋至极,但也有“快糙猛”出效果的成就感,如图. 后来想想,不对啊,难道以后 ...

  10. Spark Core 资源调度与任务调度(standalone client 流程描述)

    Spark Core 资源调度与任务调度(standalone client 流程描述) Spark集群启动:      集群启动后,Worker会向Master汇报资源情况(实际上将Worker的资 ...