drf的APIView、GenericAPIView、GenericViewSet

本文介绍了django rest framework (drf)中APIView、GenericAPIView和GenericViewSet的区别与用法,重点讨论了它们在实现listview功能时的不同。通过示例代码展示了从传统的django view到drf的高级抽象视图的转变,强调了mixin的作用,如ListModelMixin、RetrieveModelMixin、UpdateModelMixin和DestroyModelMixin。文章指出,GenericAPIView提供了过滤、分页和序列化功能,而GenericViewSet结合ViewSetMixin,允许在URL配置中方便地绑定。最后,提到了使用router简化视图与URL绑定的方法。
摘要由CSDN通过智能技术生成

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等方法

image
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=
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值