分页功能: 常遇到问题,当数据记录超过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. Why WebRTC丨前世今生

    前言 近几年实时音视频通信应用呈现出了大爆发的趋势.在这些实时通信技术的背后,有一项不得不提的技术--WebRTC. 今年 1 月,WebRTC 被 W3C 和 IETF 发布为正式标准.据调研机构 ...

  2. Mathematica处理若干个点电荷的电位电场的一个程序包

    来自 Mathematica for Theoretical Physics Electrodynamics, Quantum Mechanics, General Relativity and Fr ...

  3. 【Visual Leak Detector】在 QT 中使用 VLD(方式三)

    说明 使用 VLD 内存泄漏检测工具辅助开发时整理的学习笔记. 目录 说明 1. 使用前的准备 2. 在 QT 中使用 VLD 2.1 复制 lib 库及头文件 2.2 在项目 .pro 文件中指明路 ...

  4. MyBatis 分页(前后端插件)实现

    一.后端使用 PageHelper插件 [1]引入 PageHelper jar包(Maven项目) 1 <dependency> 2 <groupId>com.github. ...

  5. day12-SpringBoot数据库操作

    SpringBoot数据库操作 1.JDBC+HikariDataSource 在SpringBoot 2.x项目中,默认使用Hikari连接池管理数据源.相比于传统的 C3P0 .DBCP.Tomc ...

  6. Windows系统下Dos命令记录

    # 切换到F:\test\目录 /d 参数可以直接切换,不需要先切换盘符 cd /d F:\test\ # 创建文件夹test md tset # 删除文件夹test rd test # 创建文件te ...

  7. netty IO模式的支持

    netty IO模式的支持 选择开发模式: // 设置对应 EventLoopGroup // Nio模型 EventLoopGroup bossGroup = new NioEventLoopGro ...

  8. pta第一到第三次题目集

    (1)前言 pta第一次作业的7-1,7-2,7-4主要熟悉运用了 if-else 的语句使用,以及运用System.out.printf进行格式化输出,7-3九九乘法表主要学会了运用for循环及多重 ...

  9. 【深入浅出 Yarn 架构与实现】5-3 Yarn 调度器资源抢占模型

    本篇将对 Yarn 调度器中的资源抢占方式进行探究.分析当集群资源不足时,占用量资源少的队列,是如何从其他队列中抢夺资源的.我们将深入源码,一步步分析抢夺资源的具体逻辑. 一.简介 在资源调度器中,以 ...

  10. 涉及面试题:有几种方式可以实现存储功能,分别有什么优缺点?什么是 Service Worker ?

    cookie,localStorage,sessionStorage,indexDB 特性 cookie localStorage sessionStorage indexDB 数据生命周期 一般由服 ...