天天看点

django-restframework之序列化类serializers.ModelSerializer,究极封装

上篇文章我们讲到了ListCreateAPIView和RetrieveUpdateDestoryAPIView这种封装

但是我们还是写了重复代码,两个类都写了

queryset = Book.objects.all()
serializer_class = BookSerialize
           

我现在想能不能把这个也精简一下,全部的方法都放在一个类里面呢?

答案肯定是没问题的,但是要动一动我们的urls路由了

多的不说,上代码:

urls

url(r'books/$',views.BookView.as_view({'get':'list','post':'create'}),name="books"),
url(r'books/(?P<pk>\d+)/$',views.BookView.as_view({'get':'retrieve','put':'update','delete':'destroy'}),name="books_filter"),
           

视图则使用继承viewsets的ModelSerializer类

class BookView(viewsets.ModelViewSet):
    queryset = Book.objects.all()
    serializer_class = BookSerialize
           

序列化类还是使用继承自serializers.ModelSerializer的序列化类不变

然后就可以在一个视图中使用全部五种方法了

为什么这样做可以呢?

看一下源码:

class ModelViewSet(mixins.CreateModelMixin,
                   mixins.RetrieveModelMixin,
                   mixins.UpdateModelMixin,
                   mixins.DestroyModelMixin,
                   mixins.ListModelMixin,
                   GenericViewSet):
           

源码中,他直接继承了全部的mixins视图组件和GenericViewSet

如果想进一步的了解其中的源码,下次再讲

给一张图片了解一下:

django-restframework之序列化类serializers.ModelSerializer,究极封装

先来看一下运行效果,其他的就不给图片了,post来看一下

django-restframework之序列化类serializers.ModelSerializer,究极封装

成功新增数据!!!!!