drf偏移分页组件

paginations.py

  1. from rest_framework.pagination import LimitOffsetPagination
  2. class MyLimitOffsetPagination(LimitOffsetPagination):
  3. # ?offset=从头偏移的条数&limit=要显示的条数
  4. limit_query_param = 'limit'
  5. offset_query_param = 'offset'
  6. # ?不传offset和limit默认显示前3条,只设置offset就是从偏移位往后再显示3条
  7. default_limit = 3
  8. # ?limit可以自定义一页显示的最大条数
  9. max_limit = 5

  10.   #eg:/cars/?offset=1&limit=4 往后偏移一位,然后往后数四个数据
  11. # 只使用limit结合ordering可以实现排行前几或后几
       #?ordering=-price&limit=2 价格降序,取最前面两条数据

views.py

  1. from rest_framework.generics import ListAPIView
  2.  
  3. class CarListAPIView(ListAPIView):
  4. # 如果queryset没有过滤条件,就必须 .all(),不然分页会出问题
  5. queryset = models.Car.objects.all()
  6. serializer_class = serializers.CarModelSerializer
  7.  
  8. # 分页组件 - 给视图类配置分页类即可 - 分页类需要自定义,继承drf提供的分页类即可
  9. pagination_class = pagenations.MyLimitOffsetPagination

drf游标分页组件(了解)

paginations.py

  1. # 注:必须基于排序规则下进行分页
  2. # 1)如果接口配置了OrderingFilter过滤器,那么url中必须传ordering
  3. # 1)如果接口没有配置OrderingFilter过滤器,一定要在分页类中声明ordering按某个字段进行默认排序
  4. from rest_framework.pagination import CursorPagination
  5. class MyCursorPagination(CursorPagination):
  6. cursor_query_param = 'cursor'
  7. page_size = 3
  8. page_size_query_param = 'page_size'
  9. max_page_size = 5
  10. ordering = '-pk'

views.py

  1. from rest_framework.generics import ListAPIView
  2.  
  3. class CarListAPIView(ListAPIView):
  4. # 如果queryset没有过滤条件,就必须 .all(),不然分页会出问题
  5. queryset = models.Car.objects.all()
  6. serializer_class = serializers.CarModelSerializer
  7.  
  8. # 分页组件 - 给视图类配置分页类即可 - 分页类需要自定义,继承drf提供的分页类即可
  9. pagination_class = pagenations.MyCursorPagination

自定义过滤器

filters.py

  1. # 自定义过滤器,接口:?limit=显示的条数
  2. class LimitFilter:
  3. def filter_queryset(self, request, queryset, view):
  4. # 前台固定用 ?limit=... 传递过滤参数
  5. limit = request.query_params.get('limit')
  6. if limit:
  7. limit = int(limit)
  8. return queryset[:limit]
  9. return queryset

views.py

  1. from rest_framework.generics import ListAPIView
  2.  
  3. class CarListAPIView(ListAPIView):
  4. # 如果queryset没有过滤条件,就必须 .all(),不然分页会出问题
  5. queryset = models.Car.objects.all()
  6. serializer_class = serializers.CarModelSerializer
  7.  
  8. # 局部配置 过滤类 们(全局配置用DEFAULT_FILTER_BACKENDS)
  9. filter_backends = [LimitFilter]

接口:/?limit=5  显示5条数据

过滤器插件:django-filter

安装

  1. pip install django-filter

过滤条件层:自定义app01/filters.py

  1. # django-filter插件过滤器类
  2. from django_filters.rest_framework.filterset import FilterSet
  3. from . import models
  4.  
  5. # 自定义过滤字段
  6. from django_filters import filters
  7. class CarFilterSet(FilterSet):
  8. min_price = filters.NumberFilter(field_name='price', lookup_expr='gte')
  9. max_price = filters.NumberFilter(field_name='price', lookup_expr='lte')
  10. class Meta:
  11. model = models.Car
  12. fields = ['brand', 'min_price', 'max_price']
  13. # brand是model中存在的字段,一般都是可以用于分组的字段
  14. # min_price、max_price是自定义字段,需要自己自定义过滤条件

视图层:views.py

  1. # django-filter插件过滤器
  2. from django_filters.rest_framework import DjangoFilterBackend
  3. from .filters import CarFilterSet
  4.  
  5. class CarListAPIView(ListAPIView):
  6. queryset = models.Car.objects.all()
  7. serializer_class = serializers.CarModelSerializer
  8.  
  9. # 局部配置 过滤类 们(全局配置用DEFAULT_FILTER_BACKENDS)
  10. filter_backends = [DjangoFilterBackend]
  11.  
  12. # django-filter过滤器插件使用
  13. filter_class = CarFilterSet
  14. # 接口:?brand=...&min_price=...&max_price=...
  15. # eg:?brand=宝马&min_price=5&max_price=10 => 5~10间的宝马牌汽车

DRF框架(九)——drf偏移分页组件、drf游标分页组件(了解)、自定义过滤器、过滤器插件django-filter的更多相关文章

  1. DRF url控制 解析器 响应器 版本控制 分页(常规分页,偏移分页,cursor游标分页)

    url控制 第二种写法(只要继承了ViewSetMixin) url(r'^pub/$',views.Pub.as_view({'get':'list','post':'create'})), #获取 ...

  2. drf框架 - 过滤组件 | 分页组件 | 过滤器插件

    drf框架 接口过滤条件 群查接口各种筛选组件数据准备 models.py class Car(models.Model): name = models.CharField(max_length=16 ...

  3. DRF框架之 serializers 序列化组件

    1. 什么是序列化,其实在python中我们就学了序列化工具json工具,就是吧信息存为类字典形式 2. DRF框架自带序列化的工具: serializers 3. DRF框架 serializers ...

  4. DRF框架学习总结

    DRF框架安装配置及其功能概述 Django与DRF 源码视图解析 DRF框架序列化和返序列化 DRF框架serializers中ModelSerializer类简化序列化和反序列化操作 DRF源码s ...

  5. DRF框架简介(第一天)

    1.drf框架全称 djangorestframework 1.如何安装drf框架: pip3 install djangorestframework #drf框架其实就是一个app称之为drf #d ...

  6. drf框架中分页组件

    drf框架中分页组件 普通分页(最常用) 自定制分页类 pagination.py from rest_framework.pagination import PageNumberPagination ...

  7. drf偏移分页组件-游标分页-自定义过滤器-过滤器插件django-filter

    drf偏移分页组件 LimitOffsetPagination 源码分析:获取参数 pahenations.py from rest_framework.pagination import Limit ...

  8. DRF框架(八)——drf-jwt手动签发与校验、搜索过滤组件、排序过滤组件、基础分页组件

    自定义drf-jwt手动签发和校验 签发token源码入口 前提:给一个局部禁用了所有 认证与权限 的视图类发送用户信息得到token,其实就是登录接口,不然进不了登录页面 获取提交的username ...

  9. DRF框架中分页功能接口

    目录 DRF框架中分页功能接口 DRF框架中分页功能接口 一.在框架中提供来三个类来实现分页功能,PageNumberPagination.LimitOffsetPagination.CursorPa ...

随机推荐

  1. [RN] React Native 打包时 减少 Apk 的大小

    React Native 打包时 减少 Apk 的大小 主要有两个方法: 在打包前设置 android\app\build.gradle 文件中 1) def enableProguardInRele ...

  2. OpenFOAM——在钝板上分离的层流

    本算例来自<ANSYS Fluid Dynamics Verification Manual>中的VMFL063: Separated Laminar Flow Over a Blunt ...

  3. 深入ES6中的class类

    今天在学习vuex时,遇到了定义store类时的一种写法,就是在类中的方法使用箭头函数绑定this的问题时的一种操作,感觉写法有点陌生,遂深究一番,好了上代码 此处写commit中的地方,是为了绑定t ...

  4. 享元模式(Flyweight Pattern)

    定义: 采用一个共享来避免大量拥有相同内容对象的开销.这种开销中最常见.直观的就是内存的损耗.享元模式以共享的方式高效的支持大量的细粒度对象. 享元的英文是flyweight,是一个来自体育方面的专业 ...

  5. Octopus501工作站 安装记录

    cmake libreadline-dev 没有运行程序,nvidia-smi查看GPU-Util 达到100% 解决方案:需要把驱动模式设置为常驻内存才可以,设置命令:nvidia-smi -pm ...

  6. leetcode 85. 最大矩形

    题目描述: 给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积. 思路分析: 这题是之前那道最大正方形的进阶,同样是利用dp来求解.通过逐行去计算最大矩形,即优化的 ...

  7. MORMOT REST文件上传

    MORMOT REST文件上传 上传数据格式必须是:MULTIPART/FORM-DATA uses SynCommons 后端处理参照下列代码: 后端处理参照下列代码: procedure TWeb ...

  8. Mysql之Incorrect string value: '\xF0\x9F\x98\x89 \xE6... 保存emoji表情

    错误信息如下: Incorrect string value: '\xF0\x9F\x98\x89 \xE6...' 问题产生的原因是字符串不兼容4字节的unicode导致的,一般我们常见的表情编码等 ...

  9. 命令行利用ffmpeg实现rtmp推流《转》

    ffmpeg在以前介绍过,是一个相当强大的工具,我们这次利用它实现rtmp推流(最终推流地址统一为rtmp://127.0.0.1:1935/live/123). 1.首先下载ffmpeg和ffpla ...

  10. 大牛总结的MySQL锁优化【转】

    MySQL 就是其中之一,它经历了多个版本迭代.数据库锁是 MySQL 数据引擎的一部分,今天我们就一起来学习 MySQL 的数据库锁和它的优化. MySQL 锁分类 当多个事务或者进程访问同一个资源 ...