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这个方法就可以了。
  • 相关阅读:
    [bzoj 4199][NOI 2015]品酒大会
    [bzoj 5332][SDOI2018]旧试题
    「PKUWC2018」猎人杀
    「PKUWC2018」Minimax
    正规消息发送器-- ESFramework 4.0 进阶(06)
    在线用户管理--ESFramework 4.0 进阶(05)
    ESFramework 4.0 进阶(04)-- 驱动力:通信引擎(下)
    驱动力—— 通信引擎(上)—— ESFramework 4.0 进阶(03)
    核心梳理——消息处理的骨架流程——ESFramework 4.0 进阶(02)
    重登陆模式 --ESFramework 4.0 快速上手(07)
  • 原文地址:https://www.cnblogs.com/zhuchunyu/p/10165178.html
Copyright © 2011-2022 走看看