zoukankan      html  css  js  c++  java
  • rest_framework --- viewsets

    viewsets :from rest_framework import viewsets  #导入方式
    ViewSetMixin(object):
    这个类,大致作用就是重写了as_view()方法,假如你写的视图类,继承了这个类,或者它的子类,那么在视图层里的as_view方法可以传参数。
    但是呢,你要是单单继承这个类的话,程序是会报错的,虽然这个类中写了as_view方法,但是这个方法的返回值是dispatch方法的内存地址,而
    ViewSetMixin这个类中没有dispatch方法,它的基类也更没有。除非你在你的视图类中写一个dispatch方法,并实现相应功能,但是这样太麻烦,
    下面介绍的这个类可以实现这个类的不足。

    ViewSet(ViewSetMixin, views.APIView):
    这个ViewSet类继承了ViewSetMixin,APIView,那么就不用再担心没有dispatch方法了。这里就充分体现了面向对象的继承。这个类下面没有写
    任何代码,就一个pass。那么我们在视图类中也可以不用继承ViewSet这个类,自己继承ViewSetMixin, views.APIView,这里必须提醒,在py3
    中,只有新式类,都继承object类,所以这个属性的查找顺序遵循深度优先,为何提醒这个呢?你看你把APIView写在ViewSetMixin之前,那么执
    行as_view方法,便会先从APIView找该方法,没有的话便会从APIView基类查找,很肯定View方法中肯定有as_view,所以便会执行这个as_view
    方法,但是你原本是想用ViewSetMixin它的as_view方法,并且传了参数,所以这样会出错!

    下面还有一些类,无非就是在ViewSet基础上继承了更多的类,达到代码简化,这样的话虽说是能减少代码量,但是扩展性呢?

    GenericViewSet(ViewSetMixin, generics.GenericAPIView):

    ReadOnlyModelViewSet(mixins.RetrieveModelMixin,mixins.ListModelMixin,GenericViewSet):

    class ModelViewSet(mixins.CreateModelMixin,
    mixins.RetrieveModelMixin,
    mixins.UpdateModelMixin,
    mixins.DestroyModelMixin,
    mixins.ListModelMixin,
    GenericViewSet):

    这就是viewsets下面的几个类,我觉得继承ViewSet这个方法就可以了。
  • 相关阅读:
    python 函数(二)
    python 函数(一)
    python 文件操作
    python标准数据类型 Bytes
    购物车代码
    关于python数据类型的一些举例
    栈的应用实例
    python 数据类型
    python相关的编码,运算
    Oracle篇 之 查询行及概念
  • 原文地址:https://www.cnblogs.com/zhuchunyu/p/10165178.html
Copyright © 2011-2022 走看看