【愚公系列】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)

相关文章
|
10天前
|
安全 数据库 C++
Python Web框架比较:Django vs Flask vs Pyramid
【4月更文挑战第9天】本文对比了Python三大Web框架Django、Flask和Pyramid。Django功能全面,适合快速开发,但学习曲线较陡;Flask轻量灵活,易于入门,但默认配置简单,需自行添加功能;Pyramid兼顾灵活性和可扩展性,适合不同规模项目,但社区及资源相对较少。选择框架应考虑项目需求和开发者偏好。
|
3天前
|
Python
python面型对象编程进阶(继承、多态、私有化、异常捕获、类属性和类方法)(上)
python面型对象编程进阶(继承、多态、私有化、异常捕获、类属性和类方法)(上)
40 0
|
3天前
|
索引 Python
python 格式化、set类型和class类基础知识练习(上)
python 格式化、set类型和class类基础知识练习
23 0
|
5天前
|
Python
python学习12-类对象和实例对象
python学习12-类对象和实例对象
|
5天前
|
前端开发 数据挖掘 API
使用Python中的Flask框架进行Web应用开发
【4月更文挑战第15天】在Python的Web开发领域,Flask是一个备受欢迎的轻量级Web框架。它简洁、灵活且易于扩展,使得开发者能够快速地构建出高质量的Web应用。本文将深入探讨Flask框架的核心特性、使用方法以及在实际开发中的应用。
|
6天前
|
关系型数据库 数据库 开发者
Python中的Peewee框架:轻量级ORM的优雅之旅
【4月更文挑战第13天】在Python的众多ORM框架中,Peewee以其轻量级、简洁和易于上手的特点,受到了许多开发者的青睐。Peewee的设计理念是“小而美”,它提供了基本的ORM功能,同时保持了代码的清晰和高效。本文将深入探讨Peewee的核心概念、使用场景以及实战应用,帮助读者更好地理解和使用这一框架。
|
6天前
|
SQL API 数据库
Python中的SQLAlchemy框架:深度解析与实战应用
【4月更文挑战第13天】在Python的众多ORM(对象关系映射)框架中,SQLAlchemy以其功能强大、灵活性和易扩展性脱颖而出,成为许多开发者首选的数据库操作工具。本文将深入探讨SQLAlchemy的核心概念、功能特点以及实战应用,帮助读者更好地理解和使用这一框架。
|
8天前
|
网络协议 Java API
Python网络编程基础(Socket编程)Twisted框架简介
【4月更文挑战第12天】在网络编程的实践中,除了使用基本的Socket API之外,还有许多高级的网络编程库可以帮助我们更高效地构建复杂和健壮的网络应用。这些库通常提供了异步IO、事件驱动、协议实现等高级功能,使得开发者能够专注于业务逻辑的实现,而不用过多关注底层的网络细节。
|
9天前
|
安全 Java 数据处理
Python网络编程基础(Socket编程)多线程/多进程服务器编程
【4月更文挑战第11天】在网络编程中,随着客户端数量的增加,服务器的处理能力成为了一个重要的考量因素。为了处理多个客户端的并发请求,我们通常需要采用多线程或多进程的方式。在本章中,我们将探讨多线程/多进程服务器编程的概念,并通过一个多线程服务器的示例来演示其实现。
|
9天前
|
程序员 开发者 Python
Python网络编程基础(Socket编程) 错误处理和异常处理的最佳实践
【4月更文挑战第11天】在网络编程中,错误处理和异常管理不仅是为了程序的健壮性,也是为了提供清晰的用户反馈以及优雅的故障恢复。在前面的章节中,我们讨论了如何使用`try-except`语句来处理网络错误。现在,我们将深入探讨错误处理和异常处理的最佳实践。