admin源码解析以及仿照admin设计stark组件
---恢复内容开始---
admin源码解析
一 启动:每个APP下的apps.py文件中。
首先执行每个APP下的admin.py 文件。
def autodiscover():
autodiscover_modules('admin', register_to=site)
二 注册:在admin中注册,那么我们在登录admin的后台管理的时候回显示出来。
class AdminSite(object):
def __init__(self, name='admin'):
self._registry = {}
def register(self, model_or_iterable, admin_class=None, **options):
if not admin_class:
admin_class = ModelAdmin # 配置类,我们可以通过继承此配置类来进行自定义配置类。 self._registry[model] = admin_class(model, self) # {Book:BookConfig(Book),Publish:ModelAdmin(Publish)} site=AdminSite()
class BookConfig(ModelAdmin): #通过继承ModelAdmin来进行自定义配置类。顾名思义就是对我们的类进行配置,比如显示格式,搜索条件,分类依据等
list_display=["",] admin.site.register(Book,BookConfig) admin.site.register(Publish)
那么我们在注册的时候可以看出admin.site是一个对象,那么这个对象有一个register的方法。而site从sites中导入。
① 进入admin源码:

② 进入sites源码:

③ register方法:

self._registry[model] = admin_class(model, self)
对应的输出结果为:
{
<class 'django.contrib.auth.models.Group'>: <django.contrib.auth.admin.GroupAdmin object at 0x00000256B97EF9E8>,
<class 'django.contrib.auth.models.User'>: <django.contrib.auth.admin.UserAdmin object at 0x00000256B9825438>,
<class 'app01.models.Book'>: <app01.admin.BookConfig object at 0x00000256B983C080>,
<class 'app01.models.Publish'>: <app01.admin.PublishConfig object at 0x00000256B983C128>
}
我们的键值都存在_registry中,我们可以通过for循环取出注册的类与其配置类的对象。
三 设置url:
设置url的目的是什么:
目的:为每一个注册的model设计增删该查4个url
http://127.0.0.1:8000/admin/app01/book/
http://127.0.0.1:8000/admin/app01/book/add
http://127.0.0.1:8000/admin/app01/book/1/change/
http://127.0.0.1:8000/admin/app01/book/1/delete/
① 看admin源码如何实现url的设置。

② 进入site

③ 第二步其中有一个点:

四 仿照admin组件开发自定义stark组件:
一 既然是仿照admin组件,那么我们就按照admin的组件来设计。
① 当我们新建一个项目APP01 ,django会自动把APP01 添加到setting中的app_install中。
② 同时自动在APP01 下的apps中:

APPConfig中的方法:
def ready(self):
"""
Override this method in subclasses to run code when Django starts.
在子类中重写此方法,以便在Django启动时运行代码。这里我们就可以看出当我们进行stark重写的时候我们需要在apps中添加上这样一句:
def ready(self):
autodiscover_modules('stark')
"""
③ 我们需要在APP01 下的model中定义我们的类。
④ 同时在APP01 下的admin中进行注册。进行一些自定制的显示。

⑤ 设计url:

二 仿照admin组件设计stark组件:
① 新建一个APP名为stark,同时将APP添加到setting中的app_install列表中,把stark注册到我们的django中:

② 在app01 和 stark下分别创建一个stark.py文件。
app01 中的stark替代admin进行注册功能。
③ 在app01 下定义类。
④ 设计url,在stark中设计url。

注意!!!!
那么在仿照admin组件进行自定义的时候,有几点需要注意:
① 需要手动在setting中app_install列表中添加stark应用,同时在stark应用下的apps中手动添加:
在子类中重写此方法,以便在Django启动时运行代码。这里我们就可以看出当我们进行stark重写的时候我们需要在apps中添加上这样一句:
from django.apps import AppConfig
from django.utils.module_loading import autodiscover_modules class StarkConfig(AppConfig):
name = 'stark'
def ready(self):
autodiscover_modules('stark')
② 需要在app01 下的stark中进行注册。

③ 设计url的时候:


admin源码解析以及仿照admin设计stark组件的更多相关文章
- admin源码解析及自定义stark组件
admin源码解析 单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当你希望在整个系统中,某个类只能出现一个实例时,单 ...
- django之admin源码解析
解析admin的源码 第一步:项目启动,加载settings文件中的 INSTALLED_APPS 里边有几个app就加载几个,按照注册顺序来执行. 第二步:其中加载的是admin.py,加载每一个a ...
- django -admin 源码解析
admin源码解析 单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当你希望在整个系统中,某个类只能出现一个实例时,单 ...
- Spring源码解析-ioc容器的设计
Spring源码解析-ioc容器的设计 1 IoC容器系列的设计:BeanFactory和ApplicatioContext 在Spring容器中,主要分为两个主要的容器系列,一个是实现BeanFac ...
- day 65 crm(2) admin源码解析,以及简单的仿造admin组件
前情提要: crm中的admin组件重写. 一:admin的autodiscover 作用:实现扫面该项目中的所有的admin 1:执行顺序-> 按照注册的顺序执行 二:单例模式 1:普通案例的 ...
- 6 admin(注册设计)源码解析、单例模式
1.单例模式 https://www.cnblogs.com/yuanchenqi/articles/8323452.html 单例模式(Singleton Pattern)是一种常用的软件设计模式, ...
- Django框架 之 admin管理工具(源码解析)
浏览目录 单例模式 admin执行流程 admin源码解析 单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当你希望在 ...
- Django 之 admin组件使用&源码解析
admin组件使用 Django 提供了基于 web 的管理工具. Django 自动管理工具是 django.contrib 的一部分.可以在项目的 settings.py 中的 INSTALLED ...
- 微服务配置中心 Apollo 源码解析——Admin 发送发布消息
内容参考:https://www.toutiao.com/a6643383570985386509/ 摘要: 原创出处http://www.iocoder.cn/Apollo/admin-server ...
随机推荐
- How to Export to Excel
https://simpleisbetterthancomplex.com/tutorial/2016/07/29/how-to-export-to-excel.html Export data to ...
- KNN手写实践:Python基于数据集整体计算以及排序
1. 距离计算,不要通过遍历每个样本来计算和指定样本距离,而是通过对于指定样本进行广播(复制)成为一个shape和全局一致后,再进行整体计算,这里的广播 / 复制采用的是tile函数来实现的: 2. ...
- jp@gc - Stepping Thread Group配置解释描述
测试环境 apache-jmeter-2.13 插件: https://jmeter-plugins.org/downloads/old/ http://pan.baidu.com/s/1gfC1 ...
- php调用C#生成的dll(二)
根据上一篇博文,php调用c#生成的动态库,运行测试时报Fatal error: Class 'COM' not found in XXXXXXXXX 原因是php.ini中未开启COM组件的应用,解 ...
- Java 反射基础
1.反射概念: Java运行时,动态获得类的信息以及动态调用对象的方法的功能. 在运行时判断任意一个对象所属的类 在运行时构造任意一个类的对象 在运行时判断任意一个类所具有的成员变量和方法 在运行时调 ...
- java -jar 执行jar包出现 java.lang.NoClassDefFoundError
我用idea工具将自己开发java程序打成一个可执行的jar包,当然用eclipse或者直接用jar命令行都无所谓,本质都是将程序归档到一个压缩包,并附带一个说明清单文件. 打jar的操作其实很简单, ...
- 阿里巴巴Java编码规范,来测测你能得多少分
今年年初,<阿里巴巴Java开发手册>正式发布,阿里官方Java代码规范标准首次对外公开.手册发布之后在业界.学术界都获得了广泛的关注,仅微博浏览量就突破千万,下载访问量超过40万,多家媒 ...
- 前端实现在线预览pdf、word、xls、ppt等文件
最近在做一个公司的资源管理系统,一些知识小记一下. 1.前端实现pdf文件在线预览功能 方式一.pdf文件理论上可以在浏览器直接打开预览但是需要打开新页面.在仅仅是预览pdf文件且UI要求不高的情况下 ...
- WebService C#开发/调用
简单描述C#开发WebService操作步骤以及调用方式 WebService开发 第一步:创建Web空项目 第二步:为创建的Web空项目添加Web服务 第三步:实现WebService方法(仅供参考 ...
- idea下的调试配置
react和ts的整合 https://github.com/Microsoft/TypeScript-React-Starter vue的 https://github.com/ducksoupde ...