Django:RestFramework之-------分页
9.分页操作
- 分页,看第n页,每页显示n条数据
- 分页,在n个位置,向后查看n条数据.
- 加密分页,上一页和下一页
1.基于PageNumberPagination分页
1.路由:
url(r'^(?P<version>[v1|v2]+)/splitpage/$', views.SplitpageView.as_view(),),
2.视图函数
from rest_framework.pagination import PageNumberPagination
from rest_framework.response import Response
#分页需要导入类
class SplitpageView(APIView):
def get(self,request,*args,**kwargs):
#获取所有数据
roles = models.Role.objects.all()
#创建分页对象
pg = PageNumberPagination()
#在数据库中获取分页的数据
pager_roles = pg.paginate_queryset(queryset=roles,request=request,view=self)
print(pager_roles)
#对数据进行序列化
ser = PagerSerialiser(instance=pager_roles,many=True)
return Response(ser.data)
#settings.py配置
REST_FRAMEWORK = {
"PAGE_SIZE":2,
}
- 返回效果:

- 自定义分页:
class MyPageNumberPagination(PageNumberPagination):
#一页显示数量
page_size = 2
#设置
page_size_query_param = "size"
#每页最大数量
max_page_size = 5
#url页数变量设置:
page_query_param = "page"
class SplitpageView(APIView):
def get(self,request,*args,**kwargs):
#获取所有数据
roles = models.Role.objects.all()
#创建分页对象
pg = PageNumberPagination()
#在数据库中获取分页的数据
pager_roles = pg.paginate_queryset(queryset=roles,request=request,view=self)
print(pager_roles)
#对数据进行序列化
ser = PagerSerialiser(instance=pager_roles,many=True)
return Response(ser.data)
- 显示效果:

显示上一页与下一页,url
#上面函数基础上:
res = pg.get_paginated_response(ser.data)
return ret

2.基于LimitOffsetPagination实现分页
class MyPageNumberPagination2(LimitOffsetPagination):
default_limit = 2
limit_query_param = "limit"
offset_query_param = "offset"
max_limit = 5
class SplitpageView(APIView):
def get(self,request,*args,**kwargs):
#获取所有数据
roles = models.Role.objects.all()
#创建分页对象
pg = MyPageNumberPagination2()
#在数据库中获取分页的数据
pager_roles = pg.paginate_queryset(queryset=roles,request=request,view=self)
print(pager_roles)
#对数据进行序列化
ser = PagerSerialiser(instance=pager_roles,many=True)
return Response(ser.data)
- 显示结果

3.基于CursorPagination 分页(加密)
from rest_framework.pagination import CursorPagination
class MyPageNumberPagination3(CursorPagination):
#
cursor_query_param = "cursor"
page_size = 2
ordering = 'id'
page_size_query_param = None
max_page_size = None
class SplitpageView(APIView):
def get(self,request,*args,**kwargs):
#获取所有数据
roles = models.Role.objects.all()
#创建分页对象
pg = MyPageNumberPagination3()
#在数据库中获取分页的数据
pager_roles = pg.paginate_queryset(queryset=roles,request=request,view=self)
print(pager_roles)
#对数据进行序列化
ser = PagerSerialiser(instance=pager_roles,many=True)
return pg.get_paginated_response(ser.data)

4.总结:
#如果数据量大,如何做分页.
数据库性能相关?
Django:RestFramework之-------分页的更多相关文章
- django: rest-framework的 分页和过滤
django: rest-framework的 分页和过滤 2018年06月28日 10:09:01 weixin_42359464 阅读数:136 标签: flaskrestframeworkdja ...
- django restframework
一.django restframework 请求流程源码剖析 上面的认证一个流程是rest_framework的关于APIauth的认证流程,,这个流程试用权限.频率.版本.认证.这个四个组件都是通 ...
- django restframework 的日常使用
本文讨论 django restframework 的日常使用,满足常用 api 编写的需求,比如 List, Detail, Update, Put, Patch 等等.探讨 django rest ...
- Django RestFramework (DRF)
准备: 下载 pip install djangorestframework 一 APIView源码解析 1 预备知识 CBV(class based view)FBV(function based ...
- django restframework serializer 增加自定义字段
在使用django restframework serializer 序列化在django中定义的model时,有时候我们需要额外在serializer中增加一些model中没有的字段.有两种方法实现 ...
- django之快速分页
本文介绍djanog两种分页,第一是普通分页,第二是使用haystack全文检索的分页. 1.django自带分页功能,这个功能非常好用.基本知识点:Django提供了数据分页的类,这些类被定义在dj ...
- Django内置分页
一.django内置分页 from django.shortcuts import render from django.core.paginator import Paginator, EmptyP ...
- django restframework jwt
既然要来学习jwt(json web token),那么我们肯定是先要了解jwt的优势以及应用场景--跨域认证. $ pip install djangorestframework-jwt 传统coo ...
- Django中的分页,cookies与session
cookie Cookie的由来 大家都知道HTTP协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响,也不 ...
随机推荐
- 20180610模拟赛T3——书本整理
[问题描述] 小明的书架上放了许多书,为了使书架变得整洁,小明决定整理书架,他将所有书按高度大小排列,这样排了之后虽然整齐了许多,但小明发现,书本的宽度不同,导致书架看上去还是有些凌乱.小明把这个凌乱 ...
- python递归和内置方法
递归:函数调用自身 核心:递进的时候能够达到一个结果,问题规模越来越小(不一定要真正的达到):设置一个条件,能够让最后一次函数调用结束 练习: 第一个人的姓名是16岁,后面每个人的年龄都比前一个大 ...
- 31 树莓派外接Oled屏幕
http://shumeipai.nxez.com/2017/09/13/solve-the-raspberry-pi-drive-oled-problem.html
- centos虚拟机扩展磁盘空间(经历无数坑,血一样总结,史上最全)
第一步 在vmware中将虚拟机关机后,鼠标右键设置,直接点击扩展加自己想要扩展的数量就可以了,这个比较简单不多说. 2 第二步 设置后进系统查看空间大小变化,实际并没有什么变化,我用的命令是df - ...
- 一些精简的JavaScript代码集合
日历 创建过去七天的数组,如果将代码中的减号换成加号,你将得到未来7天的数组集合 // 创建过去七天的数组 [...Array(7).keys()].map(days => new Date(D ...
- 解决coursera笔记本(ipynb)打不开的问题
最近在coursera听课,发现notebook打不开,一直显示加载中. 想到了可能被墙,苦于没有梯子.最后F12,发现有报错 Failed to load resource: net::ERR_CO ...
- 怎样把excel整列单元格批量改为文本格式
选中整列,进入“数据”菜单栏,点击“分列”,[列数据格式]选“文本”,点击“完成”即可.
- c# winform button文字偏了
winform button文字偏了,解决方案来自 疯狂青蛙: http://www.cnblogs.com/cadlife 要用这个属性
- python实现栈结构
# -*- coding:utf-8 -*- # __author__ :kusy # __content__:文件说明 # __date__:2018/9/30 17:28 class MyStac ...
- 生成Makefile文件全过程
[1]生成Makefile文件全过程 整体流程如下图: 注意:以下文件根目录为testmake(任意位置新建即可) (1)测试程序 1.1 建立两个目录:mkdir include source 1. ...