DRF之Mixin5个视图扩展类及9个视图子类

一、Mixin混入类

Mixin混入类提供了几种后端视图(对数据资源进行增删改查)处理流程的实现,如果需要编写的视图属于这五种,则视图可以通过继承相应的扩展类来复用代码,减少自己编写的代码量。

这五个扩展类需要搭配GenericAPIView通用视图类,因为五个扩展类的实现需要调用GenericAPIView提供的序列化器与数据库查询的方法。

  1. ListModelMixin:列表视图扩展类,提供list(request,*args,**kwargs)方法快速实现列表视图,返回200状态码,该Mixin的list方法会对数据进行过滤和分页。

from rest_framework.mixins import ListModelMixin  # 获取多条数据,返回响应结果

class StudentMixinView(GenericAPIView, ListModelMixin):
    queryset = Students.objects.all()
    serializer_class = StudentModelSerializer

    def get(self, request):
        """获取所有数据"""
        return self.list(request)
  1. CreateModelMixin:创建视图扩展类,提供creaete(request,*args,**kwargs)方法快速实现创建资源的视图,成功返回201状态码。

from rest_framework.mixins import CreateModelMixin  # 添加一条数据

class StudentMixinView(GenericAPIView, CreateModelMixin):
    queryset = Students.objects.all()
    serializer_class = StudentModelSerializer

    def post(self, request):
        """添加一条数据"""
        return self.create(request)
  1. RetrieveModelMixin: 详情视图扩展类,提供retreve(request, *args, **kwargs)方法,可以快速实现返回一个存在的数据对象,如果存在返回200,否则返回404。

from rest_framework.mixins import RetrieveModelMixin  # 获取一条数据

class StudentInfoMixinView(GenericAPIView, RetrieveModelMixin, UpdateModelMixin, DestroyModelMixin):
    queryset = Students.objects.all()
    serializer_class = StudentModelSerializer

    def get(self, request, pk):
        return self.retrieve(request, pk=pk)
  1. UpdateModelMixin: 更新视图扩展类,提供update(request, *args, **kwargs)方法,可以快速实现更新一个存在的数据对象。同时也提供partial_update(request, *args, **kwargs)方法,可以实现局部更新。

from rest_framework.mixins import UpdateModelMixin  # 更新一条数据

class StudentInfoMixinView(GenericAPIView, RetrieveModelMixin, UpdateModelMixin, DestroyModelMixin):
    queryset = Students.objects.all()
    serializer_class = StudentModelSerializer

    def put(self, request, pk):
        return self.update(request, pk=pk)
  1. DestroyModelMixin:删除视图扩展类,提供destroy(request, *args, **kwargs)方法,可以快速实现删除一个存在的数据对象。

from rest_framework.mixins import DestroyModelMixin  # 删除一条数据

class StudentInfoMixinView(GenericAPIView, RetrieveModelMixin, UpdateModelMixin, DestroyModelMixin):
    queryset = Students.objects.all()
    serializer_class = StudentModelSerializer

    def delete(self, request, pk):
        return self.destroy(request, pk=pk)

二、9个视图子类

上面的接口代码还可以继续更加的精简,drf在使用GenericAPIView和Mixins进行组合以后,还提供了视图子类。

视图子类是通用视图类 和 模型扩展类 的子类,提供了各种的视图方法调用Mixins操作

  • ListAPIView = GenericAPIView + ListModelMixin获取多条数据的视图方法

  • CreateAPIView = GenericAPIView + CreateModelMixin添加一条数据的视图方法

  • RetrieveAPIView = GenericAPIView + RetrieveModelMixin获取一条数据的视图方法

  • UpdateAPIView = GenericAPIView + UpdateModelMixin更新一条数据的视图方法

  • DestroyAPIView = GenericAPIView + DestroyModelMixin删除一条数据的视图方法

组合视图子类

  • ListCreateAPIView = ListAPIView + CreateAPIView

  • RetrieveUpdateAPIView = RetrieveAPIView + UpdateAPIView

  • RetrieveDestrovAPIView = RetrieveAPIView + DestroyAPIView

  • RetrievmUpdateDestroyAPIView = RetrieveAPIView + UpdateAPIView + DestroyAPIView

views.py代码如下:

from rest_framework.generics import ListAPIView,CreateAPIView,RetrieveAPIView,UpdateAPIView,DestroyAPIView
from rest_framework.generics import ListCreateAPIView,RetrieveDestroyAPIView
from rest_framework.generics import RetrieveUpdateDestroyAPIView

class StudentView(ListCreateAPIView):
    queryset = Students.objects.all()
    serializer_class = StudentModelSerializer

class StudentInfoView(RetrieveUpdateDestroyAPIView):
    queryset = Students.objects.all()
    serializer_class = StudentModelSerializer

这样一来,就发现视图子类比前面的APIView和Mixin扩展子类要更方便的多,希望本篇对你有所帮助

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值