python_web学习笔记六:django基础篇之DRF-视图类

一、两个基本类视图

1.APIView

  • 继承Django的View

  • 认证属性

    可帮助实现用户认证

  • 权限属性

    实现用户操作权限的判断

  • 限流属性

    实现用户限流操作

2.GenericAPIView

  • 继承APIView

  • 序列化器属性(serializer_class)

    • self.get_serializer()

      根据序列化器属性指定的序列化器初始化操作得到的序列化器对象

  • 查询集属性(query_set=)

    • 获取属性指定的所有查询数据

      self.get_queryset()

    • 获取查询集中单一数据对象

      self.get_object()

  • 分页属性

    • 实现分页功能

      # 导包
      from rest_framework.pagination import PageNumberPagination
      
      
      # 改造示例
      class PageNum(PageNumberPagination):
          page_size = 5
          page_size_query_param = "pagesize"
          max_page_size = 10
      
          def get_paginated_response(self, data):
              return Response({
                  'count': self.page.paginator.count,  # 总数量
                  'lists': data,  # 用户数据
                  'page': self.page.number,  # 当前页数
                  'pages': self.page.paginator.num_pages,  # 总页数
                  'pagesize': self.page_size  # 后端指定的页容量
              })
          
          
       # 指定分页器
      pagination_class = PageNum
      
    • 排序

      # 导包
      from rest_framework.filters import OrderingFilter
      # 排序示例
          filter_backends = [OrderingFilter]
          ordering_fields = ('id', 'bread', 'pub_date')
      

二、五个拓展类

必须配合GenericAPIView一起使用

说明
CreateModelMixin 封装create方法,实现了数据保存
ListModelMixin 封装list方法,获取指定的查询集数据
RetrieveModelMixin 封装retrieve方法,获取单一数据对象
UpdateModelMixin 封装update方法,更新数据
DestroyModelMixin 封装destory方法,删除数据

三、拓展类子类

说明
CreateAPIView 实现了post 保存数据
ListAPIView 实现了get 获取所有查询集数据
ListCreateAPIView 实现了post和get 保存数据和获取所有查询集数据
RetrieveAPIView 实现了get方法 获取单一数据对象
UpdateAPIView 实现了put方法 更新数据
DestoryAPIView 实现了delete方法 删除数据
RetrieveUpdateAPIView 实现了get和put方法 获取单一数据对象和更新数据
RetrieveUpdateDestoryAPIView 实现get、put、delete

四、视图集

1.两个基本视图集

  • ViewSet

    • 继承APIView和ViewSetMixin

      ViewSetMixin拓展类重写as_view方法

  • GenericViewSet

    • 继承GenericAPIView和ViewSetMixin

2.两个拓展视图集

  • ModelViewSet

    • 继承了五个拓展类和GenericViewSet
  • ReadOnlyModelViewSet

    • 继承了ListModelMixin和RetrieveModelMixin和GenericViewSet

3.视图集和视图类的使用区别

  • 路由匹配形式不一样

  • 定的类视图中的方法不必按照请求方式定义

  • 可以使用自定生成路由的方法

你可能感兴趣的:(python学习笔记_web篇,python笔记,python,django1.11.11,DRF,视图集)