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

Alt text

流程图

>

Alt text

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值