视图的使用

本文介绍了APIView、GenericAPIView及其扩展类,详细讲解了视图的创建、操作(获取、修改、删除)以及GenericAPIView的通用属性和方法。涵盖ListCreateAPIView、RetrieveUpdateDestroyAPIView等子类视图的应用实例。
摘要由CSDN通过智能技术生成

视图简介

APIView —> GenericAPIView —> 视图扩展类 —> 子类视图

1.APIView

使用前需导入

from rest_framework.views import APIView
class StaffDetaView(APIView):
    def get(self,request,pk):
         return Response({"code":200,"msg":'获取成功'})
    def put(self,request,pk,**kwargs):
        # 根据id查找相应信息,返回对象
        staff = Staff.objects.filter(id=pk).first()

       if not staff:
        return Response({
              "code":400,
             "msg":'修改数据不存在'
          })
        # 反序列化 更新
       # partial 实现局部更新
     ser = StaffSerializer(instance=staff, data=request.data, partial=True)
  
       # 校验数据
       if ser.is_valid():
           ser.save() # 调用update
           return Response({
              "code": 200,
                 "msg": '修改成功'
            })
         else:
             return Response({"code":400,"msg":ser.errors})

         return self.update(request,pk,**kwargs)

     def delete(self,request,pk):
    
         return Response({"code":200,"msg":'删除员工成功'})

2.GenericAPIView

继承自APIView

from rest_framework.generics import GenericAPIView

通用属性

  • queryset 视图查询集
  • serializer_class 视图使用的序列化器

列表视图使用:

  • pagination_class分页控制类
  • filter_backends过滤控制后端,对字段过滤

详情页视图使用

  • lookup_field 查询单一数据对象时使用的条件字段,默认为’pk’
  • lookup_url_kwarg 查询单一数据时URL中的关键字参数,默认与look_field相同

通用方法:

  • get_queryset()
    - 返回视图使用的查询集
    - 默认返回queryset属性,支持重写
  • get_serializer_class()
    - 返回序列化器类,默认返回serializer_class,可以重写
  • get_serializer(self, *args, **kwargs)
    -返回序列化器对象

详情页独有方法

  • get_object()
    -默认参数来过滤
class StaffView(GenericAPIView):
    queryset = Staff.objects.all()
    serializer_class = StaffSerializer
     def get(self,request,*args,**kwargs):
         staff_info = self.get_queryset()
         # 序列化,返回一个序列化对象
         staff_all = self.get_seializer(staff_info,many=True)
         return Response({
             "staff":staff_all.data
         })

3.扩展类

扩展类封装方法说明
ListModelMixinList获取一组数据
CreateModelMixincreate新增一条数据
RetrieveModelMixinretrieve获取指定数据
UpdateModelMixinupdate更新指定数据
DestroyModelMixindestroy删除指定数据
class StaffView(GenericAPIView,ListModelMixin):
    queryset = Staff.objects.all()
    serializer_class = StaffSerializer
    def get(self,request,*args,**kwargs):
         return self.list(request,*args,**kwargs)

4.视图子类

子类视图类继承请求处理方法
ListAPIViewGenericAPIView、ListModelMixinget
CreateAPIViewGenericAPIView、CreateModelMixinpost
RetrieveAPIViewGenericAPIView、RetrieveModelMixinget
UpdateAPIViewGenericAPIView、UpdateModelMixinput
DestroyAPIViewGenericAPIView、DestroyModelMixindelete
ListCreateAPIViewGenericAPIView、ListModelMixin、CreateModelMixinget 和 post
RetrieveUpdateAPIViewGenericAPIView、RetrieveModelMixin、UpdateModelMixinget、put
RetrieveDestroyAPIViewGenericAPIView、RetrieveModelMixin、DestroyModelMixinget 和 delete
RetrieveUpdateDestroyAPIViewGenericAPIView、RetrieveModelMixin、UpdateModelMixin、DestroyModelMixinget、put、delete

导入

from rest_framework.generics import *
class StaffView(ListCreateAPIView):
    queryset = Staff.objects.all()
    serializer_class = StaffSerializer

:这是示例,其他视图方法一样

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值