django-xadmin路由分发系统、系统核心功能类视图生成原理_a35155的博客-程序员宅基地

本文详细介绍了xadmin的路由系统和我们常见的类视图(比如List、Create、Retrieve、Update类视图)的动态生成过程。

 

1、django会通过总路由中的来注册xadmin所有的视图函数。

2、xadmin.sites.urls里面发生了什么呢?

xadmin.sites.urls中的urls函数中调用site. get_urls()

3、get_urls()会先遍历self._registry_views然后将url添加到urlpatterns中,并将xurlpatterns返回给django总路由

4、self._registry_views是哪里来的呢?通过sites.registry_view函数添加的。

而registry_view函数就在xadmin.views.__init__.py中被调用了。

5、get_urls()还会遍历self._registry,将url添加到urlpatterns

self._registry是哪里来的呢?通过sites.registry函数添加的

而registry函数在哪里被调用的呢?就是在你注册模型的admin管理类时。

装饰器注册:

函数注册:

6、url都注册完成了,那么类视图是在什么时候被创建的呢

就是在get_urls()遍历self._registry_views和self._registry生成urlpatterns时,

就是这两个标注的函数创建的

点进去看下,先通过get_view_class函数获得类视图名字,然后通过as_view注册:

在详细看下get_view_class这个方法里面,它将很多内容拼接到一起组成了最终的类视图名字new_class_name,

这个类视图具有的属性和方法就不在深入探究了(其实也在这个方法中实现的),然后将这个类视图添加到了

sites. AdminSite._admin_view_cache类属性中。

7、最后我们再来看下_admin_view_cache这个类属性,也是所有的类视图,我只截取部分:

前面是xadmin自动生成的类视图,例如password相关的、login/logout相关的等等

Departments是我自己写的模型,有看到create、list、edit、delete等相关的类视图了吧。

 

8、最后的最后,随便看其中一个类视图,以DepartmentsList类视图为例:


9、这些类视图的属性是如何被赋予的呢,可以看我的这篇文章,里面详细介绍了xadmin的所有类视图及功能。https://blog.csdn.net/bocai_xiaodaidai/article/details/94558390
 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/a35155/article/details/98957734

智能推荐

算法笔记练习 5.1 简单数学 问题 E: 众数_输入20个数,每个数都在1~10之间,求1~10中的众数(众数就是出现次数最多的数,如果-程序员宅基地

算法笔记练习 题解合集题目链接题目题目描述输入20个数,每个数都在1-10之间,求1-10中的众数(众数就是出现次数最多的数,如果存在一样多次数的众数,则输出权值较小的那一个)。输入测试数据有多组,每组输入20个1-10之间的数。输出对于每组输入,请输出1-10中的众数。注意如果存在一样多次数的众数,则输出权值较小的那一个。样例输入8 9 6 4 6 3 10 4 7 4 2..._输入20个数,每个数都在1~10之间,求1~10中的众数(众数就是出现次数最多的数,如果

oracle olap 不可用,[数据库]ORACLE OLAP错误ORA-程序员宅基地

[数据库]ORACLE OLAP错误ORA02015-04-25 00:00:20刚刚安装了ORACLE 10g R2后,启动数据库时发现告警日志有如下错误: Database Characterset is UTF8replication_dependency_tracking turned off (no async multimaster replication found)WARNING..._ora-36961: oracle olap 不可用

在Mac下创建ASP.NET Core Web API_mac asp开发网页-程序员宅基地

在Mac下创建ASP.NET Core Web API 这系列文章是参考了.NET Core文档和源码,可能有人要问,直接看官方的英文文档不就可以了吗,为什么还要写这些文章呢? 原因如下: 官方文档涉及的内容相当全面,属于那种大而全的知识仓库,不太适合初学者,很容易让人失去重要,让人掉入到具体的细节之中。 对于大多数人来讲开发语言只是工具,程序员都有一个通病,就是死_mac asp开发网页

在微软要on-call吗?累吗?要半夜起来吗?_formula10000的博客-程序员宅基地

1.最近面试了一位来自某大厂的人。最后提问环节他问:“听说微软WLB很好,那么你们要on-call吗?要的话,会经常夜里起来解决问题吗?”他说,他负责的服务有时需要晚上处理on-call的..._onwlb

display: none 和display: block之间的切换出现过渡效果失效-程序员宅基地

原因:display: none是销毁当前dom节点,再次切换为display: block时会再创建节点,此时css选择器会重新赋予上去。所以不存在渐变动画。解决方法:用opacity(透明度)去替代。

You are using pip version 21.2.4; however, version 21.3.1 is available.升级最新版pip失败解决方案_warning: you are using pip version 21.2.4; however_歪卜巴比的博客-程序员宅基地

在使用pip安装python第3方库的时候,遇到提示pip升级(如下所示)运用网上搜寻的输入如下指令的办法仍无法解决问题python -m pip install --upgrade pip依然是大片飘红并继续提示升级.解决方案:1.去PYPI上下载pip最新版的.whl文件网址 Search results · PyPI2.将该文件放在python安装目录中的Scripts文件夹下3.然后在cmd中输入安装指令pip insta..._warning: you are using pip version 21.2.4; however, version 23.2.1 is availa

随便推点

mysql qt 列车项目学习笔记_qt列车系统-程序员宅基地

第一步连接数据库 以后修改一下基本通用static bool createConnection(){ QSqlDatabase db =QSqlDatabase::addDatabase("QMYSQL"); //加载数据库驱动,类似的还有QODBC, QSQLITE....... db.setUserName("root");//用户名 db.setPassword(..._qt列车系统

SpringBoot测试类启动错误 java.lang.IllegalStateException: Unable to find a @SpringBootConfiguration, you ne...-程序员宅基地

报错java.lang.IllegalStateException: Unable to find a @SpringBootConfiguration, you need to use @ContextConfiguration or @SpringBootTest(classes=...) with your test......................_springboot测试类 unable to find

Git:Git内幕_git hash的是内容吗-程序员宅基地

一、深入Git内幕研究的引子介绍从这一讲往后,我们会不少讲,是进入这个git课程的最后一块内容,就是git内幕原理简单带一句,我现在的一个授课思想,刚开始学习一个技术,必须先短平快引入,入门要快,把这个技术最核心需要用到的一些东西,用一点简单的demo带一些,快速的就入门了在入门的同时,用的是那个技术最核心的一些东西,直接把这个技术最最根本,最最基础的原理,给大家阐明刚有个感觉,体验,功能背后的一套比较根本的原理是那样子的,三个区域就是纯实战驱动,这个技术在实际企业中是怎么来运用的,如果是类似ma_git hash的是内容吗

AAC ADTS封装实现-程序员宅基地

一、AAC音频格式种类有哪些AAC音频格式是一种由MPEG-4标准定义的有损音频压缩格式。AAC包含两种格式 ADIF(Audio Data Interchange Format音频数据交换格式)和ADTS(Audio Data transport Stream音频数据传输流)。ADIF特点:可以确定的找到音视频数据的开始,不需要进行在音视频数据流中间开始的解码,它的解码必须在明确的定义开始。应用场景:常用在磁盘文件中。ADTS特点:具有同步字的比特流,解码可以在这个流中任何位置开始。类似于mp_aac adts

解决启动Apache遇到的问题Permission denied: AH00072: make_sock: could not bind to address 0.0.0.0:8888-程序员宅基地

解决启动Apache遇到的问题Permission denied: AH00072: make_sock: could not bind to address 0.0.0.0:8888

推荐文章

热门文章

相关标签