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‘})),
]

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

时间: 2024-10-06 20:51:57

DRF框架之视图集(ModelViewSet)简介的相关文章

drf框架 6 视图集与路由组件(开发最常用、最高级) 三大认证原理 RBAC认证规则

准备工作 models.py from django.db import models # 基类:是抽象的(不会完成数据库迁移),目的是提供共有字段的 class BaseModel(models.Model): is_delete = models.BooleanField(default=False) updated_time = models.DateTimeField(auto_now_add=True) class Meta: abstract = True # 必须完成该配置 cla

DRF框架之视图的扩展类简介

这里呢,我将为大家介绍一下DRF框架,为我们提供的试图扩展类的使用方法即作用. 在使用视图扩展类时,需要将mixins模块导入到view文件中. from rest_framework import mixins 并且,在使用视图扩展类时,必须结合GenericAPIView基类一起使用. 所谓,视图的扩展类,就是GenericAPIView的子类,他们继承自GenericAPIView类,并在此基础上封装了增删改查的功能函数. 模板代码: class BookInfoAPIView(mixin

使用DRF视图集时自定义action方法

在我们用DRF视图集完成了查找全部部门,创建一个新的部门,查找一个部门,修改一个部门,删除一个部门的功能后,views.py的代码是这样子的: class DepartmentViewSet(ModelViewSet): queryset = Department.objects.all() serializer_class = DepartmentSerializer 现在需要新增一个功能,查询最新成立的部门. 这时,我们就需要自定义action方法了. 新增功能后的代码如下: class D

DRF中五大扩展类及视图集的介绍

五个扩展类 (1)ListModelMixin 列表视图扩展类,提供list(request, *args, **kwargs)方法快速实现列表视图,返回200状态码. 该Mixin的list方法会对数据进行过滤和分页. 源代码: class ListModelMixin(object): """ List a queryset. """ def list(self, request, *args, **kwargs): # 过滤 queryse

DRF ---- 视图类 数据工具类 工具视图集 视图集

目录 一. 视图类 1. ApiView 2. GenericAPIView get_queryset 配置queryset get_object 配置 lookup_url_kwarg get_serializer 配置 serializer_class GenericAPIView配置 结合使用: 二.视图工具类 1)ListModelMixin 群查 2)CreateModelMixin 单增 3) RetrieveModelMixin 单查 4)UpdateModelMixin 单改 5

视图类与视图集的基本使用

视图类与视图集的使用 一.视图类:View.APIView.GenericAPIView View是Django提供的一个视图类,类的返回值需要用到HttpResponse.JSONResponse (一).APIView 继承自Django中定义的View,但和View有两个区别: 返回数据用到的是drf框架中的Response 对数据的处理上,可以通过query_params来代替GET,data来代替POST # 创建加密分页类 class MyCursorPagination(Curso

drf框架 8 系统权限类使用 用户中心信息自查 token刷新机制 认证组件项目使用:多方式登录 权限组件项目使用:vip用户权限 频率组件 异常组件项目使用

系统权限类使用 图书接口:游客只读,用户可增删改查权限使用 from rest_framework.permissions import IsAuthenticatedOrReadOnly class BookViewSet(ModelViewSet): # 游客只读,用户可增删改查 permission_classes = [IsAuthenticatedOrReadOnly] queryset = models.Book.objects.all() serializer_class = se

一个DRF框架的小案例

第一步:安装DRF DRF需要以下依赖: Python (2.7, 3.2, 3.3, 3.4, 3.5, 3.6) Django (1.10, 1.11, 2.0) DRF是以Django扩展应用的方式提供的,所以我们可以直接利用已有的Django环境而无需从新创建.(若没有Django环境,需要先创建环境安装Django) pip install djangorestframework 第二步:添加rest_framework应用 在**settings.py**的**INSTALLED_A

drf框架中分页组件

0922自我总结 drf框架中分页组件 普通分页(最常用) 自定制分页类 pagination.py from rest_framework.pagination import PageNumberPagination # 普通分页 class CarPageNumberPagination(PageNumberPagination): # 默认一页的条数 page_size = 3 # 用户可以自定义选择一页的条数,但最多显示5条 page_size_query_param = 'page_s