GenericAPIView就是继承PAIView,为了对列表试图的了解
可以配置Mixin扩展, GenericAPIView 是有关数据管理的基类,学习有关方法操作
导包
from rest_framework.generics import GenericAPIView1.1GenericAPIView内部属性
queryset***=objects.all/.filter/.order_by***
就是列表要查询的结果对象
serializer_class=serializer
视图会用到序列化器,一般指定queryset
列表视图的属性
pagination_class
可以进行分页
filter_backends
可以过滤字段
详情页视图单独属性
lookup_url_kwarg
动态路由传递的参数命名
lookup_field
过滤的orm参数
列表与详情视图通用方法
get_queryset(self)
视图使用的查询集,是列表视图与详情视图获取数据的基础
get_serializer_class(self)
返回序列化器类,默认返回serializer_class
get_serializer(self, args, **kwargs)
返回序列化器对象
from django.db import models
# Create your models here.
# 商品种类
class Kinds(models.Model):
kind_name=models.CharField(max_length=20,verbose_name="种类名称")
class Meta:
db_table="kinds"
verbose_name="商品种类表"
verbose_name_plural=verbose_name
def __str__(self):
return self.kind_name
# 商品名称
class Goods(models.Model):
name=models.CharField(max_length=20,verbose_name="商品名")
price=models.IntegerField(verbose_name="单价")
num_ber=models.IntegerField(verbose_name="数量")
sale_out=models.CharField(max_length=20,verbose_name="售空")
kind=models.ForeignKey(to=Kinds,on_delete=models.CASCADE,verbose_name="种类名称")
class Meta:
db_table="goods"
verbose_name="商品表"
verbose_name_plural=verbose_name
def __str__(self):
2.混入类与扩展类
ListModelMixin
创建视图的扩展类可以快速实现列表视图
返回200状态码
该Mixin的 list 方法会对数据进行过滤和分页
CreateModelMixin
视图的扩展类快速实现创建资源的视图
成功返回201状态码
序列器对前端发送的数据失败就会返回400错误
RetrieveModelMixin
详细扩展类进行单独数据的返回
详情数据如果存在返回200 错了就返回400
UpdateModelMixin
更新视图扩展类可以实现更新的效果
成功返回200 序列化器数据失败则返回400
DestroyModelMixin
删除视图扩展类
可以实现删除的数据对象
成功返回204,错误返回404
2.2 扩展类的应用
ListModelMixin
from rest_framework.views import APIView
from rest_framework.response import Response
from goods.models import Kinds,Goods
from goods.serializes import KindsSerializer,GoodsSerializer,GoodsSerializer2
from rest_framework.generics import ListCreateAPIView,RetrieveUpdateDestroyAPIView,ListAPIView
# Create your views here.
# 查询全部增加数据
# 种类
class KindsView(ListCreateAPIView):
# 指定查询
queryset = Kinds.objects.all()
# 序列化器
serializer_class = KindsSerializer
#查询增删改
class KindsView2(RetrieveUpdateDestroyAPIView):
queryset = Kinds.objects.all()
serializer_class = KindsSerializer
# 商品
class GoodsView(ListCreateAPIView):
queryset = Goods.objects.all()
serializer_class = GoodsSerializer
# 商品的增删改
class GoodsView2(RetrieveUpdateDestroyAPIView):
queryset = Goods.objects.all()
serializer_class = GoodsSerializer
# 查询学生信息时,外键字段为种类名
class GoodsView3(ListAPIView):
queryset = Goods.objects.all()
serializer_class = GoodsSerializer2
class GoodsView4(APIView):
def get(self,request,id):
good_data=Goods.objects.filter(kind_id=id)
ser=GoodsSerializer2(instance=good_data,many=True)
return Response(ser.data,status=201)



