本文详细介绍了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 |
|