- 继承自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):
self.serializer_class = student_info_serializer
instance = self.get_object()
order_valid = self.get_serializer(instance, request.data)
order_valid.is_valid()
order_valid.save()
return Response(order_valid.data)