前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【愚公系列】2022年04月 Python教学课程 69-DRF框架之五个扩展类视图的子类视图

【愚公系列】2022年04月 Python教学课程 69-DRF框架之五个扩展类视图的子类视图

作者头像
愚公搬代码
发布2022-04-18 08:00:44
2900
发布2022-04-18 08:00:44
举报
文章被收录于专栏:历史专栏历史专栏

文章目录


一、DRF框架之五个扩展类视图的子类视图

常用子类视图

1.CreateAPIView

提供 post 方法

继承自: GenericAPIView、CreateModelMixin

2.ListAPIView

提供 get 方法

继承自:GenericAPIView、ListModelMixin

3.RetireveAPIView

提供 get 方法

继承自: GenericAPIView、RetrieveModelMixin

4.DestoryAPIView

提供 delete 方法

继承自:GenericAPIView、DestoryModelMixin

5.UpdateAPIView

提供 put 和 patch 方法

继承自:GenericAPIView、UpdateModelMixin

6.ListCreateAPIView

提供 get、post 方法

继承自:GenericAPIView、ListModelMixin、CreateModelMixin

7.RetrieveDestroyAPIView

提供get、delete方法

继承自:GenericAPIView、RetrieveModelMixin、DestoryModelMixin

8.RetrieveUpdateAPIView

提供 get、put、patch方法

继承自: GenericAPIView、RetrieveModelMixin、UpdateModelMixin

9.RetrieveUpdateDestoryAPIView

提供 get、put、patch、delete方法

继承自:GenericAPIView、RetrieveModelMixin、UpdateModelMixin、DestoryModelMixin

二、相关案例

代码语言:javascript
复制
from rest_framework.response import Response
from rest_framework.mixins import ListModelMixin, CreateModelMixin, RetrieveModelMixin, UpdateModelMixin, \
    DestroyModelMixin
from rest_framework.generics import GenericAPIView
from book.models import BookInfo
from drf_book.serializer import BookSerializer

from rest_framework.generics import ListCreateAPIView, RetrieveUpdateDestroyAPIView


class BooksMixinView(ListCreateAPIView):
    """
        获取所有图书和保存图书
    """
    # 指定查询集属性
    queryset = BookInfo.objects.all()
    # 指定序列化器
    serializer_class = BookSerializer


class BookMixinView(RetrieveUpdateDestroyAPIView):
    """
           获取单一图书数据
           更新图书
           删除图书
       """
    # 指定查询集属性
    queryset = BookInfo.objects.all()
    # 指定序列化器
    serializer_class = BookSerializer

三、序列化器进一步封装使用

1.封装序列化器的常用方法

代码语言:javascript
复制
# 源代码封装基本序列化器
class BaseSerialzier(object):
    def __init__(self, instance=None, data=None):
        """
            初始化方法
        :param instance:  对象
        :param data: 验证的数据
        """
        self.instance = instance
        self.v_data = data

    def is_valid(self):
        """
            验证方法
        :return:
        """
        self.validate_data = self.validate(self.v_data)
        return self.validate_data

    def save(self):
        """
            保存或更新
        :return:
        """

        if self.instance is not None:
            self.instance = self.update(self.instance, self.validate_data)
        else:
            self.instance = self.create(self.validate_data)
        return self.instance

    @property
    def data(self):
        """
            获取序列化结果方法
        :return:
        """
        return {'btitle': 'python'}

    def validate(self, atter):
        """
            多个字段验证
        :return:
        """
        pass

    def create(self, validate_data):
        """
            保存数据
        :return:
        """

        pass

    def update(self, instance, validate_data):
        """
            更新数据
        :return:
        """
        pass

2.序列化器的定义

代码语言:javascript
复制
from baseserilaizer import BaseSerialzier
class BookSerializer(BaseSerialzier):
    """
        自定义序列化器
    """

    def validate(self, atter):
        # 字段验证逻辑
        print(atter)
        return atter

    def update(self, instance, validate_data):
        print('update')
        print(validate_data)
        return instance

    def create(self, validate_data):
        print('create')
        return validate_data

3.视图定义使用序列化器

代码语言:javascript
复制
from serializer import BookSerializer
from genericapiview import GenericAPIView
class BookView(GenericAPIView):
    queryset = {'btitle':'python'}
    serializer_class = BookSerializer


    def post(self,request):

        # 1、获取前端数据
        data=request.get('data')
        # 2、验证数据
        ser=self.get_serializer(data=data)
        ser.is_valid()
        # 3、保存数据
        ser.save()
        # 4、返回结果
        return ser.data



request={'data':{'btitle':'python'}}

data=BookView().post(request)
print(data)

总结

子类视图总共有9个如下:

  • CreateAPIView:继承CreateModelMixin,GenericAPIView,有post方法,新增数据
  • DestroyAPIView:继承DestroyModelMixin,GenericAPIView,有delete方法,删除数据
  • ListAPIView:继承ListModelMixin,GenericAPIView,有get方法获取所有
  • UpdateAPIView:继承UpdateModelMixin,GenericAPIView,有put和patch方法,修改数据
  • RetrieveAPIView:继承RetrieveModelMixin,GenericAPIView,有get方法,获取一条
  • ListCreateAPIView:继承ListModelMixin,CreateModelMixin,GenericAPIView,有get获取所有,post方法新增
  • RetrieveDestroyAPIView:继承RetrieveModelMixin,DestroyModelMixin,GenericAPIView,有get方法获取一条,delete方法删除
  • RetrieveUpdateAPIView:继承RetrieveModelMixin,UpdateModelMixin,GenericAPIView,有get获取一条,put,patch修改
  • RetrieveUpdateDestroyAPIView:继承RetrieveModelMixin,UpdateModelMixin,DestroyModelMixin,GenericAPIView,有get获取一条

DRF框架的五个扩展类视图的子类视图,是为了更便于crud的封装减少通用逻辑的代码量,也是DRF简化版本,其实下面还有视图集可以进一步简化代码,等下一节介绍了。

相关DRF框架的API介绍:

  • 获取列表资源list(request)
  • 新建单一资源self.create(request)
  • 获取单一资源self.retrieve(request, pk)
  • 全更新单一资源self.update(request, pk)
  • 部分更新单一资源self.partial_update(request, pk)
  • 删除单一资源self.destroy(request, pk)
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-04-18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、DRF框架之五个扩展类视图的子类视图
    • 1.CreateAPIView
      • 2.ListAPIView
        • 3.RetireveAPIView
          • 4.DestoryAPIView
            • 5.UpdateAPIView
              • 6.ListCreateAPIView
                • 7.RetrieveDestroyAPIView
                  • 8.RetrieveUpdateAPIView
                    • 9.RetrieveUpdateDestoryAPIView
                    • 二、相关案例
                    • 三、序列化器进一步封装使用
                      • 1.封装序列化器的常用方法
                        • 2.序列化器的定义
                          • 3.视图定义使用序列化器
                          • 总结
                          相关产品与服务
                          文件存储
                          文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
                          领券
                          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档