博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
admin组件详解
阅读量:6817 次
发布时间:2019-06-26

本文共 2057 字,大约阅读时间需要 6 分钟。

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个视图方法

Alt text

流程图

>

Alt text

至于增删改查视图中的方法就步过介绍了,自定义admin组件的基本逻辑就是这样

转载于:https://www.cnblogs.com/songxuexiang/p/9603169.html

你可能感兴趣的文章
Google推出实时内容洞察工具 为用户提供表现最好的内容
查看>>
虚拟机故障与故障处理工具之指令篇
查看>>
iOS 基础知识学习目录索引
查看>>
My_Base_notes
查看>>
Node assert断言学习及mocha框架与travisCI初探
查看>>
大话转岗 PHP 开发小结
查看>>
React的状态管理
查看>>
寻找一种易于理解的一致性算法(扩展版)下
查看>>
MySQL - 高可用性:少宕机即高可用?
查看>>
2018电影票房分析-谁才是票房之王
查看>>
程序员可以干到多少岁?
查看>>
Storm系列(六)storm和kafka集成
查看>>
东南亚的招聘骗局,程序员请注意!
查看>>
Android 获得View宽高的几种方式
查看>>
iOS正则表达式
查看>>
关于javascript的this指向问题
查看>>
Promise的理解和用法
查看>>
java B2B2C Springboot电子商城系统-高可用的服务注册中心
查看>>
Dubbo的总体架构
查看>>
Spring Cloud微服务架构代码结构详细讲解
查看>>