Django Admin和它的小伙伴们
胡阳@搜狐
date: 2013-07-29
blog: the5fire.com
Django的Admin有什么?
- 基于Model自动创建的基础的CRUD页面
- 批量操作:action、filter、search
- 方便的自定义:ModelAdmin、ModelForm
数据层定制
重载ModelAdmin,设定属性:
class BookAdmin(admin.ModelAdmin): search_fields = ('name', 'alias') fields = ('name', 'alias', 'desc', 'category', 'tags', 'status',) list_display = ('preview', 'name', 'alias', 'category', 'create_time') form = BookForm list_per_page = 15 def preview(self, obj): return '<a href="#">%s</a>' % obj preview.short_description = u'预览' preview.allow_tags = True
以及重写逻辑:
@csrf_protect_m def changelist_view(self, request, extra_context=None): # blablabla
页面逻辑定制
自定义Form:
class BookForm(forms.ModelForm): name = forms.CharField(max_length='20', label=u'modif by form') def clean_name(self): raise ValidationError(u'哈哈,错了吧') class Meta: model = Book
深度定制
重写admin模板自定义context不好
合理的方式是模板继承,继承ModelAdmin
需要探索模板:
▾ admin/ ▸ bin/ ▸ locale/ ▸ static/ ▾ templates/ ▸ admin/ ▸ registration/ ▸ templatetags/ ▸ views/ __init__.py [RO] actions.py [RO] filters.py [RO] forms.py [RO] helpers.py [RO] models.py [RO] options.py [RO] sites.py [RO] tests.py [RO] util.py [RO] validation.py [RO] widgets.py [RO]
自带Admin的问题
- 文档甚少,需要看源码
- 代码的高耦合
So, 小伙伴来了
- admin2 - by pydanny
- xadmin - by sshwsfc(差沙)微云
好看的主题
都是基于Bootstrap
数据层的更改
- xadmin把ModelAdmin分离出View层(类似Django的view)
- djadmin2重用了Django的View
优缺点-xadmin
- 优点
- 功能完善
- 插件机制
- 完全替代
- 缺点
- 文档不全
- 定制可能麻烦
优缺点-djadmin2
- 优点
- 可自定义主题
- restful接口
- 代码直接(不绕)
- 缺点
- 功能比较弱
- 目前未完全覆盖django的admin
参考
我自己用xadmin和djadmin2做了个demo: https://github.com/the5fire/django_admin_demo
----EOF-----
微信公众号:Python程序员杂谈
微信公众号:Python程序员杂谈