DRF(Django REST Framework)中的类视图

本文详细介绍了Django REST framework中的视图组件,包括APIView、GenericAPIView和ViewSet的使用方法,以及如何通过Mixin组合实现各种功能,如列表、详情、创建、更新和删除操作。
摘要由CSDN通过智能技术生成

一、基础类

1、APIView

DRF中的类视图最底层为APIView,APIView继承自Django的View视图,重新封装了request并初始化了一些组件。

主要实现功能有:
APIException——异常捕获
authentication_classes——用于身份认证
permission_classes——权限检查
throttle_classes—— 流量控制
使用中需要重写get(),post(),update()等方法

2、GenericAPIView

GenericAPIView(views.APIView)

继承自APIView,最主要新增功能:serializer_class 序列化器(可以将Django的serializers不能序列化的DataTime,Image等格式序列化);pagination_class 分页器;filter_backends 过滤器等

GenericAPIView一般需要Mixin组合使用。

二、五个拓展类Mixin

ListModelMixin  列表视图拓展类——get

RetrieveModelMixin  详情视图拓展类——get

CreateModelMxin  创建视图拓展类——post

UpdateModelMixin 更新视图拓展类——update

DestoryModelMixin  删除视图拓展类——delete

三、拓展类与GenericAPIView组合

常用的单功能类

ListAPIView (mixins.ListModelMixin,GenericAPIView)

RetrieveAPIView

CreateAPIVIew

UpdateAPIView

DestroyAPIView

也可以组合功能类,如ListCreateAPIView等

四、ViewSet

使用例子:

class GoodsListViewSet(mixins.ListModelMixin,viewsets.GenericViewSet):
    """
    商品列表页
    """
    queryset = Goods.objects.all()
    serializer_class = GoodsSerializer
    pagination_class = GoodsPagination

路由:

方法一:

router = DefaultRouter()
router.register(r'goods', GoodsListViewSet)

方法二:

# goods_list = GoodsListViewSet.as_view({
    # 'get': 'list',
# })

可以看到我们将原本需要在函数中通过代码实现get与list的绑定,在viewset类视图中可以方便的在路由中绑定。

这是因为:

class GenericViewSet(ViewSetMixin, generics.GenericAPIView):

class ViewSetMixin(object):
    """
    This is the magic.

    Overrides `.as_view()` so that it takes an `actions` keyword that performs
    the binding of HTTP methods to actions on the Resource.

    For example, to create a concrete view binding the 'GET' and 'POST' methods
    to the 'list' and 'create' actions...

    view = MyViewSet.as_view({'get': 'list', 'post': 'create'})
    """

ViewSetMixin中重写了as_view函数。

此外ViewSetMixin中对request初始化并添加了一些使用的action。

一般情况,viewset与router配合使用。
参考博客:

https://blog.csdn.net/mrnoboday/article/details/81112750

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值