分享

django-xadmin路由分发过程(源码解读)

 阳关旧友 2022-03-30

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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多