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

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

一、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


二、相关案例

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.封装序列化器的常用方法

# 源代码封装基本序列化器
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.序列化器的定义

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.视图定义使用序列化器

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)

相关文章
|
15天前
|
Java 测试技术 持续交付
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
本文重点讲解如何搭建App自动化测试框架的思路,而非完整源码。主要内容包括实现目的、框架设计、环境依赖和框架的主要组成部分。适用于初学者,旨在帮助其快速掌握App自动化测试的基本技能。文中详细介绍了从需求分析到技术栈选择,再到具体模块的封装与实现,包括登录、截图、日志、测试报告和邮件服务等。同时提供了运行效果的展示,便于理解和实践。
55 4
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
|
4天前
|
缓存 API 数据库
Python哪个框架合适开发速卖通商品详情api?
在跨境电商平台速卖通的商品详情数据获取与整合中,Python 语言及其多种框架(如 Flask、Django、Tornado 和 FastAPI)提供了高效解决方案。Flask 简洁灵活,适合快速开发;Django 功能全面,适用于大型项目;Tornado 性能卓越,擅长处理高并发;FastAPI 结合类型提示和异步编程,开发体验优秀。选择合适的框架需综合考虑项目规模、性能要求和团队技术栈。
14 2
|
9天前
|
缓存 监控 测试技术
Python中的装饰器:功能扩展与代码复用的利器###
本文深入探讨了Python中装饰器的概念、实现机制及其在实际开发中的应用价值。通过生动的实例和详尽的解释,文章展示了装饰器如何增强函数功能、提升代码可读性和维护性,并鼓励读者在项目中灵活运用这一强大的语言特性。 ###
|
5天前
|
安全 API 数据库
Python哪个框架合适开发淘宝商品详情api?
在数字化商业时代,开发淘宝商品详情API成为企业拓展业务的重要手段。Python凭借其强大的框架支持,如Flask、Django、Tornado和FastAPI,为API开发提供了多样化的选择。本文探讨了这些框架的特点、优势及应用场景,帮助开发者根据项目需求选择最合适的工具,确保API的高效、稳定与可扩展性。
15 0
|
12天前
|
安全 API 网络架构
Python中哪个框架最适合做API?
本文介绍了Python生态系统中几个流行的API框架,包括Flask、FastAPI、Django Rest Framework(DRF)、Falcon和Tornado。每个框架都有其独特的优势和适用场景。Flask轻量灵活,适合小型项目;FastAPI高性能且自动生成文档,适合需要高吞吐量的API;DRF功能强大,适合复杂应用;Falcon高性能低延迟,适合快速API开发;Tornado异步非阻塞,适合高并发场景。文章通过示例代码和优缺点分析,帮助开发者根据项目需求选择合适的框架。
39 0
|
11月前
|
Python
跟我从0学Python——类的继承和多态
类的继承和多态 —— 面向对象编程的扩展与灵活性
|
6月前
|
搜索推荐 Python
Python学习 -- 类的继承
Python学习 -- 类的继承
45 0
|
11月前
|
Kotlin Python
Python(三十一)python类class继承与多态
Python是一门面向对象语言 面向对象的三大特征:封装、继承、多态 我们这里来看一下python 类的继承 通过继承创建的新类称为子类或派生类,被继承的类称为基类、父类或超类。 一:类的继承 1 :继承语法 arduino 复制代码 class 派生类名(基类名) ... 通常我们定义的类没有指定继承对象都是继承自object类,另外,python是支持多继承的。 下边我们使用代码来演示一下python的继承: 我们定义一个person类,其中有name、age两个属性,getInfo方法,为父类。 我们定义一个school类,其中getSchoolInfo方法,为父类。 定义一
59 0
|
搜索推荐 Python
Python学习 -- 类的继承
Python学习 -- 类的继承
48 0
|
Python
Python教程:类的继承,什么是继承
- 继承是一种新建类的方式,新建的类称为子类,被继承的类称为父类 - 继承的特性是:子类会遗传父类的属性 - 继承是类与类之间的关系
147 0
Python教程:类的继承,什么是继承