DRF-模型视图集ModelViewSet

  • 继承自GenericAPIVIew,同时包括了ListModelMixin、RetrieveModelMixin、CreateModelMixin、UpdateModelMixin、DestoryModelMixin
  • 当然也可以自定义动作
  • 不需要再手动写动作了, 指定queryset, serializer_class, pagination_class即可
  • 路由中直接再as_view()中映射即可
# 获得/添加学生
    url(r'^class/students/$', StudentsView.as_view({"get": "list", "post": "create"})),
    # 删除唯一规格对象,获得单一对象等等
    url(r'^class/students/(?P<pk>\d+)/$', StudentsView.as_view({"delete":"destroy", "get":"retrieve","put":"update"})),
	# 自定义了一个动作, 只是简单的修改一下学生信息
	url(r'^class/students/(?P<pk>\d+)/info/$', StudentsView.as_view({"put":"info"})),

Demo

class StudentsView(ModelViewSet,CacheResponseMixin):
    queryset, = StudentInfo.objects.all().order_by('id') #指定查询集合
    serializer_class = StudentInfoSerializer # 指定序列化器
    pagination_class = MyPage # 指定 自定义的分页器
	
	# 学生信息的修改
    @action(methods=['put'], detail=True)
    def info(self, request, pk):
        # # 根据pk 得到一个数据库的对象
        # instance = super().get_object()
        #
        # # 修改info 只需要一个简单的序列化器即可
        # self.serializer_class = student_info_serializer
        # info_valid = super().get_serializer(instance,data=request.data)
        # info_valid.is_valid(raise_exception=True)
        # info_valid.save()
        # return Response(info_valid.data)
		
		
		# 另一种方式
        self.serializer_class = student_info_serializer
        instance = self.get_object() # 根据pk得到一个序列化器对象
        order_valid = self.get_serializer(instance, request.data) # 根据数据库对项得到一个序列化器对象
        order_valid.is_valid() # 数据校验
        order_valid.save() # 数据保存
        return Response(order_valid.data) # 返回前端
发布了17 篇原创文章 · 获赞 0 · 访问量 83

猜你喜欢

转载自blog.csdn.net/qq_35876972/article/details/104827260
今日推荐