drf偏移分页组件

pahenations.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.  
  11. # 只使用limit结合ordering可以实现排行前几或后几
  12. # ?ordering=-price&limit=2 => 价格前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游标分页组件(了解)

pahenations.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

自定义过滤器

  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]

过滤器插件:django-filter

安装
  1. >: pip3 install django-filter
过滤条件层:自定义api/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分页组件补充的更多相关文章

  1. DRF 分页组件

    Django Rest Framework 分页组件 DRF的分页 为什么要使用分页 其实这个不说大家都知道,大家写项目的时候也是一定会用的, 我们数据库有几千万条数据,这些数据需要展示,我们不可能直 ...

  2. DRF分页组件

    为什么要使用分页 其实这个不说大家都知道,大家写项目的时候也是一定会用的, 我们数据库有几千万条数据,这些数据需要展示,我们不可能直接从数据库把数据全部读取出来, 这样会给内存造成特别大的压力,有可能 ...

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

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

  4. drf-过滤组件|分页组件|过滤器

    目录 drf-过滤组件|分页组件|过滤器 群查接口各种筛选组件数据准备 drf过滤组件 搜索过滤组件 | SearchFilter 案例: 排序过滤组件 | OrderingFilter 案例: dr ...

  5. drf框架中分页组件

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

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

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

  7. DRF框架(九)——drf偏移分页组件、drf游标分页组件(了解)、自定义过滤器、过滤器插件django-filter

    drf偏移分页组件 paginations.py from rest_framework.pagination import LimitOffsetPagination class MyLimitOf ...

  8. drf-jwt手动签发与校验,drf小组件:过滤、筛选、排序、分页

    复习 """ 频率组件:限制接口的访问频率 源码分析:初始化方法.判断是否有权限方法.计数等待时间方法 自定义频率组件: class MyThrottle(SimpleR ...

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

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

随机推荐

  1. header() 被用来发送自定义的 HTTP 报文

    header() 被用来发送自定义的 HTTP 报文.关于HTTP报文的更多信息请参考» HTTP/1.1 specification. 请注意一点header()必须在任何实际输出之前调用,不管是普 ...

  2. mysql安装完之后,登陆后发现只有两个数据库

    mysql安装完之后,登陆后发现只有两个数据库:mysql> show databases;+--------------------+| Database           |+------ ...

  3. 怎样在 Akka Persistence 中实现分页查询

    在 Akka Persistence 中,数据都缓存在服务内存(状态),后端存储的都是一些持久化的事件日志,没法使用类似 SQL 一样的 DSL 来进行分页查询.利用 Akka Streams 和 A ...

  4. Mac系统下查看Android studio默认debug签名与正式签名的SHA1值

    https://blog.csdn.net/weixin_32364917/article/details/80095063 获取默认debug签名SHA1值方法,也可以直接打开系统的终端 输入: k ...

  5. 国产手机早就异军突起,为何还是有很多人“迷恋”iPhone?

    近几年,国产手机不论是从外观上还是设计上,以及销量上都比前有了长足的进步,手机的品质和售后也在不断提升.这也让中国手机厂商不断的推出了拥有自己品牌特色的产品.特别是2018年不少国产手机品牌的旗舰级产 ...

  6. 简单的tab栏切换

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. visual studio2019下静态链接库的制作

    创建静态库项目 项目名称为20199324lib // pch.h #ifndef __PCH__ #define __PCH__ extern int add(int a, int b);//ext ...

  8. ASP.NET core MVC动作过滤器执行顺序

    using Microsoft.AspNetCore.Mvc.Filters; using System; using System.Threading.Tasks; namespace dotnet ...

  9. maven坐标 加速下载

    <repositories> <repository> <id>aliyun</id> <name>aliyun</name> ...

  10. gitlab安装教程

    gitlab安装教程     安装教程 官网安装方法 https://about.gitlab.com/downloads/#centos7 1.准备 sudo yum install curl po ...