分页功能: 常遇到问题,当数据记录超过1000万条,如何进行分页显示问题,这时就考虑分页功能,

restframework 分页实现有三种

第一种:看n页,每页显示n条数据; PageNumberPagination,
class PagerSerializer(serializers.ModelSerializer):
class Meta:
model=models.Role
fields="__all__"
class MyPageNumberPagination(PageNumberPagination):
page_size = 2 #每页显示记录数量
page_size_query_param = 'size'
max_page_size = 5 #每页显示最大记录数量
page_query_param = 'page' 第二种:记录: 在n个位置,向后查看n条数据。LimitOffsetPagination
class MyLimitOffsetPagination(LimitOffsetPagination):
default_limit = 3
limit_query_param = 'limit' offset_query_param = 'offset' max_limit = 5
第三种;加密分页: 上一页和下一页,记录最大值和最小值,CursorPagination
class MyCursorPagination(CursorPagination):
cursor_query_param = 'cursor' page_size = 2 ordering = '-id'
page_size_query_param = None
max_page_size = 4
实战使用
class PagerView(APIView):
def get(self,request,*args,**kwargs):
#1 获取所有数据 roles=models.Role.objects.all() #2 创建分页对象
# Pager=PageNumberPagination()
# Pager=MyLimitOffsetPagination()
Pager=MyCursorPagination()
#3在数据库中获取分页的数据
page_role=Pager.paginate_queryset(queryset=roles,request=request,view=self)
#4对数据进行序列化
ser = PagerSerializer(instance=page_role, many=True)
# return Response(ser.data)
return Pager.get_paginated_response(ser.data)

分页实战:

# coding: utf-8
from rest_framework.pagination import LimitOffsetPagination
from rest_framework.response import Response class AuctionLimitPagination(LimitOffsetPagination):
default_limit = 5 # 默认分页记录
max_limit=50 # 首次分页记录
limit_query_param = 'limit'
offset_query_param = 'offset'
def get_offset(self, request): #起始位置
return 0
def get_paginated_response(self, data): # 返回数据格式
return Response(data)
from rest_framework.filters import BaseFilterBackend class ReachBottomFilter(BaseFilterBackend): def filter_queryset(self, request, queryset, view):
min_id = request.query_params.get('min_id')
if not min_id:
return queryset
return queryset.filter(id__lt=min_id) class PullDownRefreshFilter(BaseFilterBackend): def filter_queryset(self, request, queryset, view):
max_id = request.query_params.get('max_id')
if not max_id:
return queryset
return queryset.filter(id__gt=max_id).reverse() from rest_framework.viewsets import GenericViewSet
from rest_framework.mixins import RetrieveModelMixin,ListModelMixin
class auctionView(ListAPIView): # 如果是列表必须两个数据,一个是查询数据,一个是序列化
queryset = models.Auction.objects.filter(status__gt=0).order_by('id')
serializer_class = auctionSerializers
filter_backends = [ReachBottomFilter,PullDownRefreshFilter]
pagination_class = AuctionLimitPagination # #获取goods另外一种写法
def get(self,request,*args,**kwargs):
# response=super(auctionView,self).get(request,*args,**kwargs)
# # 根据response.data获取所有专场id id_list
#相关的所有商品 models.AuctionItem.objects.filter(auction_id_in=id_list)
return response

rest framwork 4 分页功能的更多相关文章

  1. 简单封装分页功能pageView.js

    分页是一个很简单,通用的功能.作为一个有经验的前端开发人员,有义务把代码中类似这样公共的基础性的东西抽象出来,一来是改善代码的整体质量,更重要的是为了将来做类似的功能或者类似的项目,能减少不必要的重复 ...

  2. php对文本文件进行分页功能简单实现

    php对文本文件进行分页功能简单实现 <!DOCTYPE> <html> <head> <meta http-equiv="Content-type ...

  3. Asp.net MVC3表格共用分页功能

    在建立的mvc3项目中,在Razor(CSHTML)视图引擎下,数据会在表格中自动的生成,但分页没有好的控件实现,这里我们开发了设计了一个分页的模板,适合于没有数据提交和有数据提交的分页的分页. 第一 ...

  4. WinForm DataGridView分页功能

    WinForm 里面的DataGridView不像WebForm里面的GridView那样有自带的分页功能,需要自己写代码来实现分页,效果如下图: 分页控件  .CS: 1 using System; ...

  5. Net 分页功能的实现

    首先写一个接口   1 2 3 4 5 6 public interface IPagedList     {         int CurrentPageIndex { get; set; }   ...

  6. 自己封装的JS分页功能[用于搭配后台使用]

    * 2016.7.03 修复bug,优化代码逻辑 * 2016.5.25 修复如果找不到目标对象的错误抛出. * 2016.5.11 修复当实际页数(pageNumber)小于生成的页码间隔数时的bu ...

  7. 一行代码调用实现带字段选取+条件判断+排序+分页功能的增强ORM框架

    问题:3行代码 PDF.NET是一个开源的数据开发框架,它的特点是简单.轻量.快速,易上手,而且是一个注释完善的国产开发框架,受到不少朋友的欢迎,也在我们公司的项目中多次使用.但是,PDF.NET比起 ...

  8. jPList – 实现灵活排序和分页功能的 jQuery 插件

    jPList 是一个灵活的 jQuery 插件,可以用于任何 HTML 结构的排序,分页和筛选.它支持的数据源包括:PHP + MySQL,ASP.NET + SQL Server,PHP + SQL ...

  9. 【jQuery 分页】jQuery分页功能的实现

    自写的jQuery实现分页功能的分页组件: 功能效果如下: 分页组件就是上图中的三部分, 分别放在表格上部  和下部 . 其中, 1>>>页面的代码如下: product.jsp 其 ...

  10. spring和mybatis集成,自动生成model、mapper,增加mybatis分页功能

    软件简介 Spring是一个流行的控制反转(IoC)和面向切面(AOP)的容器框架,在java webapp开发中使用广泛.http://projects.spring.io/spring-frame ...

随机推荐

  1. java多线程--3 线程状态、线程方法、线程类型

    java多线程--3 线程状态.线程方法.线程类型 线程状态 创建状态: **就绪状态: ** 进入状态: 创建状态:启动线程 阻塞状态:阻塞解除 运行状态:释放CPU资源 阻塞状态: 进入状态: 运 ...

  2. [Java SE]Java8新特性——默认方法

    1 简述 默认方法就是接口可以有实现方法,而且可以不需要实现类去实现其方法 默认方法(default void hello()) := 一个在接口里面有了一个(默认)实现的方法 1. 子类优先继承父类 ...

  3. list列表和tuple、条件判断、循环、dict和set、调用函数、定义函数

    1.list列表是有序的可变的列表,可以进通过append()方法末尾添加,通过pop删除末尾以及根据索引pop(i)来删除指定索引对应的元素 通过给指定的列表元素赋值更改元素值,通过列表的索引查看元 ...

  4. 【杂绪】#4 & 【Diary】CSP-S1 2021 游记(慎) & CSP-S 备赛发狂日记

    减少..减少掉 我没法同时做那么多事情了........ -------------------------------------------- 但是我\(\color{#EEEEEE}{真真切切地 ...

  5. 【LeetCode】3.19 对称二叉树

    101. 对称二叉树 ​ 给你一个二叉树的根节点 root , 检查它是否轴对称. 示例 1: 输入:root = [1,2,2,3,4,4,3] 输出:true 示例 2: 输入:root = [1 ...

  6. JUC(五)Callable

    Callable接口 创建线程的几种方式 继承Thread类 实现Runnable接口 通过Callable接口 线程池 使用Runnable接口无法获取到线程返回的结果,因此在jdk1.5后java ...

  7. 学习MASA第一天:MASA Blazor TEST项目创建

    个人博客地址: https://note.raokun.top 拥抱ChatGPT,国内访问网站:https://www.playchat.top 学习MASA第一天:MASA Blazor TEST ...

  8. 一文教你如何使用Node进程管理工具-pm2

    pm2 是什么 pm2 是一个守护进程管理工具,它能帮你守护和管理你的应用程序.通常一般会在服务上线的时候使用 pm2 进行管理.pm2 能做的其实有很多,比如监听文件改动自动重启,统一管理多个进程, ...

  9. C# Nuget版本号排序

    Nuget包版本号和我们软件应用版本号一样,不过因为稳定性等的考虑,组件版本有更高的要求.预发布版本使用频率更高 版本号介绍,详见我朋友胡承老司机的博客:Nuget包的版本规范 (qq.com) 我这 ...

  10. 一文彻底搞懂ZAB算法,看这篇就够了!!!

    最近需要设计一个分布式系统,需要一个中间件来存储共享的信息,来保证多个系统之间的数据一致性,调研了两个主流框架Zookeeper和ETCD,发现都能满足我们的系统需求.其中ETCD是K8s中采用的分布 ...