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

16 篇文章 0 订阅
4 篇文章 0 订阅

上篇文章我们讲到了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

如果想进一步的了解其中的源码,下次再讲
给一张图片了解一下:
在这里插入图片描述

先来看一下运行效果,其他的就不给图片了,post来看一下
在这里插入图片描述

成功新增数据!!!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值