常用子类视图
提供 post 方法
继承自: GenericAPIView、CreateModelMixin
提供 get 方法
继承自:GenericAPIView、ListModelMixin
提供 get 方法
继承自: GenericAPIView、RetrieveModelMixin
提供 delete 方法
继承自:GenericAPIView、DestoryModelMixin
提供 put 和 patch 方法
继承自:GenericAPIView、UpdateModelMixin
提供 get、post 方法
继承自:GenericAPIView、ListModelMixin、CreateModelMixin
提供get、delete方法
继承自:GenericAPIView、RetrieveModelMixin、DestoryModelMixin
提供 get、put、patch方法
继承自: GenericAPIView、RetrieveModelMixin、UpdateModelMixin
提供 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
# 源代码封装基本序列化器
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
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
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个如下:
DRF框架的五个扩展类视图的子类视图,是为了更便于crud的封装减少通用逻辑的代码量,也是DRF简化版本,其实下面还有视图集可以进一步简化代码,等下一节介绍了。
相关DRF框架的API介绍: