• 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这个方法就可以了。
  • 相关阅读:
    SQLite存储类(数据类型)
    SQLite常用命令
    C# 跨线程操作无效
    Android打开新的Activity并同时关闭当前Activity
    SQLite实现Top功能
    Android调用Sqlite数据库时自动生成db-journal文件的原因
    C#使用SqlDataReader读取数据库数据时CommandBehavior.CloseConnection参数的作用
    Android计算时间差
    PS通道抠图总结
    Android再次激活Activity时触发事件用于列表重新读取载入
  • 原文地址:https://www.cnblogs.com/zhuchunyu/p/10165178.html
Copyright © 2020-2023  润新知