栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

第十三单元 混入视图基类

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

第十三单元 混入视图基类

1.GenericAPIView

GenericAPIView就是继承PAIView,为了对列表试图的了解
可以配置Mixin扩展, GenericAPIView 是有关数据管理的基类,学习有关方法操作

导包

from rest_framework.generics import GenericAPIView

1.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.1混入类与GenericAPIView的组合使用
 
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)
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/870784.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号