drf(django rest framework)都很多api都可以实现listview的功能,对于他们的用法区别做了下总结。因为我也是初学者,也比较混乱,很多不全面或者不对的地方,欢迎指正。
详细内容见http://www.django-rest-framework.org/api-guide/generic-views/
从高到低的继承关系如下:
GenericViewSet(viewset) -drf
GenericAPIView(generics) -drf
APIView(views) -drf
View -django
这些view之间的差异就引出了drf中另一个核心点mixin
mixin包括:
CreateModelMixin
ListModelMixin
RetrieveModelMixin
UpdateModelMixin
DestroyModelMixin
以ListModelMixin为例做区别,如果我们不去继承这个mixin它里面的这些方法的话。
就无法将get 和 list连接起来。无法连接,那么list中所作的所有功能都不能完成。过滤,分页都将享受不到。
RetrieveModelMixin对于具体的商品信息进行了获取,序列化。这个在后面的商品详情页会介绍到。
UpdateModelMixin中对于部分更新还是全部更新进行了判断。
DestroyModelMixin用来连接我们的delete方法,在我们delete时有一些必要的操作,如设置返回状态204等。
GenericAPIView 继承自APIView:新增加了过滤、分页、序列化
GenericAPIView结合各种mixin可以组合成ListAPIView、RetrieveAPIView、等等,新增了get、post等方法
GenericViewSet继承了GenericAPIView 和ViewSetMixin ,ViewSetMixin允许在url配置时进行绑定,例如使用router或者自己进行绑定
用法示例:
model.py
class Goods(models.Model):
"""
商品
"""
category = models.ForeignKey(GoodsCategory, verbose_name="商品类目")
name = models.CharField(max_length=100, verbose_name="商品名")
sold_num = models.IntegerField(default=0, verbose_name=