13.1 Genericapiview
13.1.1 概念
概念:
继承自APIVIeW,并且增加对列表和详情视图可支持的通用的方法,并且可以搭配多个或者一个的Mixin拓展类,Genericapiview是数据管理的基类
13.1.2 属性
列表,详情视图通用属性
通用属性 | 列表视图单独属性 | 详情页面的单独属性 |
---|---|---|
queryset=objects.all /结果对象 | pagination_class j进行分页设置 | lookup_url_kwarg 动态路由参数名 |
serializer_class=Serializer序列化器 | filter_backends 过滤后端的字段 | lookup_field 过滤orm参数 |
13.2 混入类与拓展类
13.2.1功能
功能一:
mixin混入类:只提供数据,与其对应的访问功能是没有实现的,并且可以完成对应的增删查改
功能二:
可以实现复杂的接口功能,Gemericapiview 提供数据,混入类提供操作
展示列表视图拓展类 | 创建视图扩展类 | 详细视图扩展类 | 更新视图的拓展类 | 删除视图的拓展类 |
---|---|---|---|---|
1. ListModelMixin | 2. CreateModelMixin | 3.RetrieveModelMixin | 4.UpdateModelMixin | 5.DestroyModelMixin |
1.该Mixin的 list 方法会对数据进行过滤和分页
2.如果序列化器对前端发送的数据验证失败,返回 400错误
3.如果详情数据存在,返回200, 否则返回404
4.成功返回200,序列化器校验数据失败,返回400错误
5.成功返回204,不存在返回404
13.2.2混入类与Gemericapiview的组合
ListCreateAPIView
提供post和get方法,可以创建一条数据或获取列表中的数据
继承: GenericAPIView,CreateModelMixin,ListModelMixin
# 导包
from rest_framework.generics import ListAPIView,ListCreateAPIView,RetrieveUpdateDestroyAPIView
# 采用拓展类对数据进行转化 ListCreateAPIView 实现查询数据的全部和添加数据的全部
# class KindsView(ListCreateAPIView):
# queryset = Kind.objects.all() # 指定查询结果集
# serializer_class = KindSerialisers # 指定序列化器
RetrieveUpdateAPIView
提供get,put,patch,方法
继承:
GenericAPIView,RetrieveModelMixin,UpdateModelMixin
# 导包
from rest_framework.generics import ListAPIView,ListCreateAPIView,RetrieveUpdateDestroyAPIView
# class KindView(RetrieveUpdateDestroyAPIView):
# queryset = Kind.objects.all() # 指定查询结果集
# serializer_class = KindSerialisers # 指定序列化器
# lookup_url_kwarg = 'id' # 指定动态参数的名
# lookup_field = 'id' #指定过滤的ORM字段
#
13.2.3 应用
渲染主页面的和子页面的数据同时渲染到网页上
from django.shortcuts import render
from rest_framework.response import Response
from myapp.models import Kind,Goods
from myapp.serializers import KindSerialisers,GoodsSerializers,GoodsSerializers2
from rest_framework.generics import ListAPIView,ListCreateAPIView,RetrieveUpdateDestroyAPIView
from rest_framework.views import APIView
# Create your views here.
# 采用拓展类对数据进行转化 ListCreateAPIView 实现查询数据的全部和添加数据的全部
class KindsView(ListCreateAPIView):
queryset = Kind.objects.all() # 指定查询结果集
serializer_class = KindSerialisers # 指定序列化器
RetrieveUpdateDestroyAPIView帮助我们查询单个数据 修改一个数据 删除一个数据
class KindView(RetrieveUpdateDestroyAPIView):
queryset = Kind.objects.all() # 指定查询结果集
serializer_class = KindSerialisers # 指定序列化器
lookup_url_kwarg = 'id' # 指定动态参数的名
lookup_field = 'id' #指定过滤的ORM字段
# # 采用拓展类对数据进行转化 ListCreateAPIView 实现查询数据的全部和添加数据的全部
class GoodsView(ListCreateAPIView):
queryset = Goods.objects.all() # 指定查询结果集
serializer_class = GoodsSerializers # 指定序列化器
# RetrieveUpdateDestroyAPIView帮助我们查询单个数据 修改一个数据 删除一个数据
class GoodView(RetrieveUpdateDestroyAPIView):
queryset = Goods.objects.all() # 指定查询结果集
serializer_class = GoodsSerializers # 指定序列化器
# 查询数据,展示种类的外键为 种类名 查询所有信息
class GoodView2(ListAPIView):
queryset = Goods.objects.all() # 指定查询结果集
serializer_class = GoodsSerializers2# 指定序列化器
# 根据种类,展示对应的商品信息,展示种类外键为种类名
class Goodview3(APIView):
def get(self,request,id):
# 根据种类查询商品信息
good_data = Goods.objects.filter(kind_id=id)
ser = GoodsSerializers2(instance=good_data,many=True)
return Response(ser.data,status=200)