django-rest-framework-从零开始-7-视图类ListCreateAPIView和RetrieveUpdateDestroyAPIView的使用

发布时间 2023-03-22 21:11:25作者: 南风丶轻语

django-rest-framework-从零开始-7-视图类ListCreateAPIView和RetrieveUpdateDestroyAPIView的使用

1、前言

  • 之前,我们知道了有一个公共的GenericAPIView类,只需要将模型类和序列化类通过定义GenericAPIView类中querysetserializer_class属性或者重写GenericAPIView类中的get_queryset()get_serializer_class()就可以告知它我们的模型类和序列化类,这样它就能完成一般的CRUD功能。

  • 但是我们还需要明确写出get视图函数调用list方法,post视图函数调用create方法,put视图函数调用update方法,delete视图函数调用destory方法,这又是重复代码,因此drf又提供了功能的类,名叫ListCreateAPIView类和RetrieveUpdateDestroyAPIView

  • ListCreateAPIView类用于List视图,而RetrieveUpdateDestroyAPIView类用于Detail视图。List视图就是用于获取所有模型对象信息和创建一个模型对象。Detail视图用于获取单个模型对象和更新、删除单个模型对象。

  • ListCreateAPIView类继承了mixins.ListModelMixin,mixins.CreateModelMixinGenericAPIView,并重写了get、post方法。直接完成了List视图的功能

  • RetrieveUpdateDestroyAPIView类继承了RetrieveModelMixin,UpdateModelMixin,DestroyModelMixin,GenericAPIView类,重写了get、put、patch、delete方法,直接完成了Detail视图

2、创建ListCreateAPIView类视图和RetrieveUpdateDestroyAPIView类视图

修改student_manager/views.py文件

class StudentList(generics.ListCreateAPIView):
    queryset = Student.objects.all()
    serializer_class = StudentSerializer


class StudentDetail(generics.RetrieveUpdateDestroyAPIView):
    queryset = Student.objects.all()
    serializer_class = StudentSerializer

图示

image-20230317142347819

说明:

  • 可以看出这里把之前的所有公共的方法都抽出来,作为基类了。只需要我们填充模型类和序列化类。

  • 到这里,整体的流程就是:

    • 发起请求,到达路由,路由分配对应的请求视图函数,视图函数找到mixins的处理函数,处理函数调用基类GenericAPIView的一些函数,执行后返回数据

3、启动服务,测试类视图

测试和之前一样。

github:https://github.com/rainbow-tan/learn-drf