视图集ViewSet

4 篇文章 0 订阅
3 篇文章 0 订阅

视图集ViewSet

使用视图集ViewSet,可以将一系列逻辑相关的动作放到一个类中:

  • list() 提供一组数据
  • retrieve() 提供单个数据
  • create() 创建数据
  • update() 保存数据
  • destory() 删除数据

ViewSet视图集类不再实现get()、post()等方法,而是实现动作 action 如 list() 、create() 等。

01-视图集的继承分析

  • 两个基本视图集 Viewset GenericViewset

    1) ViewSet

    继承自APIView,作用也与APIView基本类似,提供了身份认证、权限校验、流量管理等。

    在ViewSet中,没有提供任何动作action方法,需要我们自己实现action方法。

    2)GenericViewSet

    继承自GenericAPIView,作用也与GenericAPIVIew类似,提供了get_object、get_queryset等方法便于列表视图与详情信息视图的开发。

  • 两个拓展视图集ModelViewset ReadOnlyModelViewSet

    1)ModelViewSet

    继承自GenericAPIVIew,同时包括了ListModelMixin、RetrieveModelMixin、CreateModelMixin、UpdateModelMixin、DestoryModelMixin。

    2)ReadOnlyModelViewSet

    继承自GenericAPIVIew,同时包括了ListModelMixin、RetrieveModelMixin。

02-视图集的基本使用

  • 视图集路由匹配

  • 视图集只在使用as_view()方法的时候,才会将action动作与具体请求方式对应上

    # 视图集路由匹配 viewset
    url(r'^books/$', view_set.BooksViewSet.as_view({'get':'list','post':'create'}))
    

03-viewset的基本使用

  • ViewSet可以使用我们自己定义的方法名进行对应不同的请求方式,路由配置稍有不同

04-actions属性的使用

  • 使用action可以根据需求切换序列化器,可以在一视图中根据情况使用不同的序列化器
	def get_serializer_class(self):
        if self.action == 'create':
            return OrderCommitSerializer
        else:
            return OrderDataSerializer

​ 在视图集中,还可以添加自定义动作。

​ 添加自定义动作需要使用rest_framework.decorators.action装饰器。

​ 以action装饰器装饰的方法名会作为action动作名,与list、retrieve等同。

​ action装饰器可以接收两个参数:

  • methods: 该action支持的请求方式,列表传递

  • detail表示是action中要处理的是否是视图资源的对象(即是否通过url路径获取主键)

    • True 表示使用通过URL获取的主键对应的数据对象

    • False 表示不使用URL获取主键

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值