码迷,mamicode.com
首页 > 其他好文 > 详细

DRF框架之视图集(ModelViewSet)简介

时间:2020-02-08 19:38:09      阅读:240      评论:0      收藏:0      [点我收藏+]

标签:date()   request   put   str   list()   查询   序列化   def   设置   

DRF框架中,一共有三个视图集类,我们这里只说明ModelViewSet一个。

ModelViewSet是封装度最高的DRF的视图类。包含了怎删改查中的所有接口操作。

它继承自GenericViewSet、ListModelMixin、RetrieveModelMixin、CreateModelMixin、UpdateModelMixin、DestoryModelMixin。

所以,在使用ModelViewSet定义API时,我们只需要套用模板即可。

使用视图集,可以将一系列逻辑相关的动作放到一个类中:

  • list() 提供一组数据
  • retrieve() 提供单个数据
  • create() 创建数据
  • update() 更新数据
  • destory() 删除数据

视图集类不再实现get()、post()、put()、delete()方法,而是实现动作 action。 如 list()、retrieve()、create()、update()、destory()

模板代码:

class BookInfoViewSet(ModelViewSet):
    """增删改查图书信息"""

    # 指定查询集
    queryset = BookInfo.objects.all()
    # 指定序列化器
    serializer_class = BookInfoModelSerializer

当我们,定义好了API视图后,我们需要在路由中,将请求方法与action进行绑定。

路由代码:

urlpatterns = [
    url(r^books/$, views.BookInfoViewSet.as_view({get:list})),
    url(r^books/(?P<pk>\d+)/$, views.BookInfoViewSet.as_view({get:retrieve})),
]

通过,以上讲解,我们发现使用ModelViewSet定义API时,非常的方便,只需要几行代码即可。

但是,DRF框架提供的action根本不能满足,我们客户的奇葩需求,那么,我们需要进行自定义action。

自定义action:

自定义action很简单,其实,我们只需要在,使用ModelViewSet定义的api类中,自定义action函数后,再将自定义的函数在路由中绑定即可。

自定义action代码:

    def 名称(self, request):
        ‘‘‘
        自定义action
        :return: JSON数据
        ‘‘‘
        pass

路由代码:

urlpatterns = [
    url(r^books/$, views.BookInfoViewSet.as_view({get:action名称})),
]

案例代码:

class BookInfoListAPIView(ModelViewSet):
    ‘‘‘使用ModelViewSet定义API
    添加数据
    ‘‘‘

    # 设置查询集
    queryset = BookInfo.objects.all()
    # 设置序列化器类
    serializer_class = BookInfoModelSerializer
    
    def latest(self, request):
        ‘‘‘获取最后一条记录‘‘‘
        
        # 获取模型数据
        book = BookInfo.objects.latest(id)
        
        # 获取序列化器对象
        s = BookInfoModelSerializer(instance=book)
        
        return Response(s.data)

案例路由代码:

urlpatterns = [
    url(r^books/$, views.BookInfoListAPIView.as_view({get:latest})),
]

 

DRF框架之视图集(ModelViewSet)简介

标签:date()   request   put   str   list()   查询   序列化   def   设置   

原文地址:https://www.cnblogs.com/chao666/p/12284439.html

(1)
(1)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!