the5fire

关注Python、Django、Vim、Linux、Web开发、团队管理和互联网--Life is short, we need Python.


DjangoAdmin和它的小伙伴

作者:the5fire | 标签:       | 发布:2013-07-30 4:38 a.m. | 阅读量: 15317, 14747

Django Admin和它的小伙伴们

胡阳@搜狐

date: 2013-07-29

blog: the5fire.com

Django的Admin有什么?

  1. 基于Model自动创建的基础的CRUD页面
  2. 批量操作:action、filter、search
  3. 方便的自定义: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

look http://localhost:8000/admin/book/book/54/

深度定制

  1. 重写admin模板自定义context不好

  2. 合理的方式是模板继承,继承ModelAdmin

  3. 需要探索模板:

    ▾ 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的问题

  1. 文档甚少,需要看源码
  2. 代码的高耦合

So, 小伙伴来了

  1. admin2 - by pydanny
  2. xadmin - by sshwsfc(差沙)微云

好看的主题

都是基于Bootstrap

数据层的更改

  • xadmin把ModelAdmin分离出View层(类似Django的view)
  • djadmin2重用了Django的View

优缺点-xadmin

  • 优点
    1. 功能完善
    2. 插件机制
    3. 完全替代
  • 缺点
    1. 文档不全
    2. 定制可能麻烦

优缺点-djadmin2

  • 优点
    1. 可自定义主题
    2. restful接口
    3. 代码直接(不绕)
  • 缺点
    1. 功能比较弱
    2. 目前未完全覆盖django的admin
- from the5fire.com
----EOF-----

微信公众号:Python程序员杂谈


其他分类: