rest framwork 4 分页功能
分页功能: 常遇到问题,当数据记录超过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 分页功能的更多相关文章
- 简单封装分页功能pageView.js
分页是一个很简单,通用的功能.作为一个有经验的前端开发人员,有义务把代码中类似这样公共的基础性的东西抽象出来,一来是改善代码的整体质量,更重要的是为了将来做类似的功能或者类似的项目,能减少不必要的重复 ...
- php对文本文件进行分页功能简单实现
php对文本文件进行分页功能简单实现 <!DOCTYPE> <html> <head> <meta http-equiv="Content-type ...
- Asp.net MVC3表格共用分页功能
在建立的mvc3项目中,在Razor(CSHTML)视图引擎下,数据会在表格中自动的生成,但分页没有好的控件实现,这里我们开发了设计了一个分页的模板,适合于没有数据提交和有数据提交的分页的分页. 第一 ...
- WinForm DataGridView分页功能
WinForm 里面的DataGridView不像WebForm里面的GridView那样有自带的分页功能,需要自己写代码来实现分页,效果如下图: 分页控件 .CS: 1 using System; ...
- Net 分页功能的实现
首先写一个接口 1 2 3 4 5 6 public interface IPagedList { int CurrentPageIndex { get; set; } ...
- 自己封装的JS分页功能[用于搭配后台使用]
* 2016.7.03 修复bug,优化代码逻辑 * 2016.5.25 修复如果找不到目标对象的错误抛出. * 2016.5.11 修复当实际页数(pageNumber)小于生成的页码间隔数时的bu ...
- 一行代码调用实现带字段选取+条件判断+排序+分页功能的增强ORM框架
问题:3行代码 PDF.NET是一个开源的数据开发框架,它的特点是简单.轻量.快速,易上手,而且是一个注释完善的国产开发框架,受到不少朋友的欢迎,也在我们公司的项目中多次使用.但是,PDF.NET比起 ...
- jPList – 实现灵活排序和分页功能的 jQuery 插件
jPList 是一个灵活的 jQuery 插件,可以用于任何 HTML 结构的排序,分页和筛选.它支持的数据源包括:PHP + MySQL,ASP.NET + SQL Server,PHP + SQL ...
- 【jQuery 分页】jQuery分页功能的实现
自写的jQuery实现分页功能的分页组件: 功能效果如下: 分页组件就是上图中的三部分, 分别放在表格上部 和下部 . 其中, 1>>>页面的代码如下: product.jsp 其 ...
- spring和mybatis集成,自动生成model、mapper,增加mybatis分页功能
软件简介 Spring是一个流行的控制反转(IoC)和面向切面(AOP)的容器框架,在java webapp开发中使用广泛.http://projects.spring.io/spring-frame ...
随机推荐
- 【CS231n assignment 2022】 vscode 环境配置
文章目录 前言 一.安装 Python 二.安装 vscode 三. cs231n 作业下载 四.配置 vscode 五.虚拟环境包安装 六.数据集 前言 今年成功考上了本校的研究生,要开始进入研究生 ...
- UI/UE设计学习路线图(超详细)
很多小伙伴认为ui设计很简单,就是用相关的软件设计制作图片.界面等.其实不然,UI设计融合了很多学科内容.要从一个完全没有基础的人成长为一个ui设计者,该如何学习呢?主要分为基础阶段和专业课程阶段,其 ...
- C++内存重叠
内存重叠是指在内存中存在两个或多个区域,它们的地址范围有交叉部分.在 C++ 中,内存重叠可能会导致程序出现不可预期的行为,因此我们需要了解它的原因和如何避免. 内存重叠的原因 内存重叠的主要原因是指 ...
- netty IO模式的支持
netty IO模式的支持 选择开发模式: // 设置对应 EventLoopGroup // Nio模型 EventLoopGroup bossGroup = new NioEventLoopGro ...
- windows下使用docker安装hyperf
https://blog.csdn.net/weixin_39398904/article/details/128469190 http://wiki.fengfengphp.com/zh-cn/ba ...
- ACM-NEFU-2020大一寒假培训三(暴力)
A.二倍的问题 Description 给定2到15个不同的正整数,你的任务是计算这些数里面有多少个数对满足:数对中一个数是另一个数的两倍.比如给定1 4 3 2 9 7 18 22,得到的答案是3, ...
- 人工智能NVIDIA显卡计算(CUDA+CUDNN)平台搭建
NVIDIA是GPU(图形处理器)的发明者,也是人工智能计算的引领者.我们创建了世界上最大的游戏平台和世界上最快的超级计算机. 第一步,首先安装N卡驱动. cby@cby-Inspiron-7577: ...
- [工具/IDE]IDEA常用效率插件
0 代码规范性检查 Alibaba Java Coding Guidelines 1 maven Maven Helper / Maven Wrapper support 2 mybatis Free ...
- [数据库]MYSQL之存储过程
一 存储过程的特点 MySQL 5.0 版本开始支持存储过程 1.1 定义 存储过程(Stored Procedure)是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象. 存储过程是为了 ...
- 使用VScode进行Python开发
一.Microsoft Store中安装:terminal 二.PowerShell中执行: [win10新版或者win11使用: 单个命令安装运行 WSL 所需的一切内容(需要重启计算机):wsl ...