接触xadmin和admin2的背景
关于国内开发的Django-xadmin和pydanny(《Two Scoops of Django》作者)发起的Django-admin2这两个Django Admin替代项目之前有做过对比。见文章 DjangoAdmin和它的小伙伴
在发现这两个项目之前我有一段时间一直是在做Django自带Admin的定制工作,在此期间熟悉了DjangoAdmin的大部分源码(没有文档的时候,代码就是最好的文档),也因此摸清楚了要定制Admin的话用哪种方式更加合适——补充一句,在使用Django开发项目时,说你这种方法合不合适的时候,往往是说你这么做是否符合DjangoStyle,所谓的DjangoStyle是指Django可能已经提供了满足你项目需求的接口,直接使用(重写)这个接口远比根据自己的想法造一个轮子好很多。
相对于其他框架Django已经算是挺重的,重——意味着功能上的强大,并且绝大部分功能都是经过实践检验的。说到这其实扯得有点远了。
说回到xadmin和admin2,上面给出的那篇文章是我们之前在做DjangoAdmin选型时写的,最终使用了xadmin来开发后台。之后的开发体验也和文章中总结的一样,功能完善,文档不全,定制起来麻烦(相对来说)。
在之后我的blog后台也有一段时间使用了admin2来替代自带的Admin,在实际使用中也提了两个Pull-Request。但是要把admin2弄得完善些,光我的这两个PR是远远不够的,即便是很多开发者都在积极的提PR,要达到功能完善依然需要时间。因此也不再使用admin2了。
xadmin的崛起和admin2的停止
在一开始看到这俩项目的时候,Django-admin2的star是高于Django-xadmin的,但是一段时间(2014年初期吧,大概)之后xadmin已经的star已经超过admin2.
前几周在admin2的issues中看到有人问admin2目前的状况,pydanny的回答是:
Our status with the project is that we aren't currently doing active development on it. While we would love to push it forward, none of our clients need us to work on it. As working in this effort is time consuming, it's not like something we can visit once a day for 5-20 minutes.
大概意思是“我们最近已经不在开发它了。虽然我们很想继续推动它,但没有需求需要我们继续在这上面工作。” 有兴趣的可以看看完整对话: Status of project#395
揣测下原因
在看到pydanny的留言之后,我从需求和技术上思考了下这两个项目的不同以及存在的价值。
从技术上来说,这两个项目都是基于Django的Class-Based View重新实现了整个后台(admin),并且都是兼容admin原有功能的。在此之上,xadmin借鉴wordpress搞了一套plugin机制出来。而admin2,使用django-rest-framework提供了RESTful的接口。
技术上的不同也就这些,大体思想一致,都是完全重写了admin,并提供了特色的功能。
从需求上来说,先说admin2,“面子工程”做的确实不够足,使用一个django-admin-bootstrapped的项目,可以轻松的让页面变成admin2这样,除了API的功能,仿佛看不到特别的需求。
但是在xadmin中情况就完全不同,xadmin在页面功能上做了更多的工作,变得更符合实际的使用习惯,要知道我们之前自定义admin时是需要添加一个左侧的功能区的,即便是这么一个东西也值得使用了,更不要说在此之上的其他功能了。
回想一下,我们在做CMS系统时为什么第一时间想到的就是用Django,就是因为自带的admin可以快速的提供基础的数据操作功能,这时我们有考虑他的背后的技术是什么样的吗?没有。在自己开发业余项目的时候,你选择一些开源的项目的原因可能是——用这个看起来很吊,但在公司的正式应用中,选择某一个开源项目的原因一定是这个项目能够快速的提供我需求的功能。
当然除了上面说的那两个原因,还有一个原因是这个开源项目是被广泛使用的(有人踩过坑,并填上了的)。
关于这两项目以及技术和需求你有什么看法呢?
微信公众号:Python程序员杂谈