十二、REST framework接口开发:学习ViewSet,为后续使用ModelViewSet做铺垫
请注意:学习ViewSet是为了后面学习ModelViewSet做铺垫
前言
学习的过程中,发现必须定义两个类才能实现增删改查查接口,那么是否可以通过一个类完成这个操作?当然可以,DRF提供了ViewSet支持这一操作。
1、编写增删改查查 接口
class CaseDataSerializer(serializers.ModelSerializer): class Meta: model = Interface_case_data fields = ["parent_id", "interface_case_name", "request_data", "request_expected_results"] # 导入ListCreateAPIView和RetrieveUpdateDestroyAPIView from rest_framework.generics import ListCreateAPIView, RetrieveUpdateDestroyAPIView # 导入ViewSet from rest_framework.viewsets import ViewSet class RequestDataView(ViewSet): # 认证类,没有时为空 authentication_classes = [] permission_classes = [] # 定义增删改查查 方法 def get_all(self, request, *args, **kwargs): return Response('get_all') def add_obj(self, request, *args, **kwargs): return Response('add_obj') def get_one(self, request, *args, **kwargs): return Response("get_one") def update_obj(self, request, *args, **kwargs): return Response("update_obj") def delete_obj(self, request, *args, **kwargs): return Response("delete_obj")
2、从ViewSet源码可以看到,此类继承了ViewSetMixin和views.APIView,而且ViewSetMixin重写了原始的路由分发机制,支持我们通过路由指定需要运行的方法
urlpatterns = [ # 通过映射的方式,执行我们视图类中的函数,具体逻辑,请自行查看源码 path('api/<str:version>/user/', views.RequestDataView.as_view({"get": "get_all", "post": "add_obj"})), # 请注意:有名分组(?P<id>\d+),不过不想定义lookup_field = 'id',把id换成pk即可 re_path("api/(?P<version>.+)/user/(?P<id>\d+)", views.RequestDataView.as_view({"get": "get_one", "put": "update_obj", "delete": "delete_obj"})), ]

浙公网安备 33010602011771号