Django CBV与FBV对比及Admin站点定制
请对比Django中基于函数的视图(FBV)和基于类的视图(CBV)的异同,并介绍Django Admin站点的定制方式。
回答
小字辈
FBV vs CBV:
| 特性 | FBV | CBV |
|---|---|---|
| 形式 | 函数接收request返回response | 类继承View,方法映射HTTP方法 |
| 复用 | 通过装饰器 | 通过继承Mixin |
| 内置 | 无 | ListView、DetailView、CreateView等 |
| 代码量 | 少(简单场景) | 少(复杂场景,复用内置方法) |
| 可读性 | 直接 | 需理解MRO和继承链 |
| 适用 | 简单视图、自定义逻辑多 | 标准CRUD、需大量复用 |
Admin定制:
from django.contrib import admin
from .models import Article
@admin.register(Article)
class ArticleAdmin(admin.ModelAdmin):
list_display = ('title', 'author', 'pub_date')
list_filter = ('pub_date', 'author')
search_fields = ('title', 'content')
fieldsets = [
('基本信息', {'fields': ['title', 'author']}),
('内容', {'fields': ['content']}),
]
高级定制:inlines(内联编辑)、actions(批量操作)、重写save_model()、自定义Admin模板覆盖。