zoukankan      html  css  js  c++  java
  • DRF框架之视图集(ModelViewSet)简介

    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'})),
    ]
    该花的钱要花,该吃的饭要吃。
  • 相关阅读:
    程序员下班去超市购物与收银员的一段搞笑对白 续集
    2010年9月02日周四_Deploying ArcGIS Mobile applications_4.1
    2010年8月30日周一_Adding layers _7.2
    2010年8月30日周一_Creating A Map_7.1
    2010年9月01日周三_CreatingAndPublishingaMobileWebService_3.2
    2010年8月29日周日_Deployment_6
    2010年8月31日周二_Navigating the map_7.3
    2010年8月30日周一_Introduction to ArcGIS Mobile SDK_1
    2010年9月01日周三_Using GPS data and devices_3.3
    2010年8月29日周日_Using the Sample Xcode Projects_5
  • 原文地址:https://www.cnblogs.com/chao666/p/12284439.html
Copyright © 2011-2022 走看看