分页:
a. 分页,看第n页, 每页显示n条数据 from rest_framework import serializers
from api import models
from rest_framework.pagination import PageNumberPagination
class PagerSerializer(serializers.ModelSerializer):
class Meta:
model = models.Role
fields = "__all__"
#第一版
#url http://www.t.com/api/v1/page/?page=2 显示第2页
class PagerView(APIView):
def get(self, request, *args, **kwargs):
#获取所有数据
roles = models.Role.objects.all()
#获取分页对象
pg = PageNumberPagination()
#在数据库中获取分页数据
pager_roles = pg.paginate_queryset(queryset=roles, request=request,views=self)
#对分页数据进行序列化
ser = PagerSerializer(instance=pager_roles,many=True)
return response(ser.data) #全局配置 分页参数 settings.py
REST_FRAMEWORK = {
"PAGE_SIZE": 2, #表示没页显示两个对象
} 第二版: 自定义分页
from rest_framework.pagination import PageNumberPagination
#自定义类 继承PageNumberPagination
class MyPagerNumberPagination(PageNumberPagination):
page_size = 2 #每页显示几个对象 #关键字 size http://www.t.com/api/v1/page/?page=2&size=5
#可以定制一页显示多少个
page_size_query_param = 'size'
#每页最大显示多少个 比如最大显示5个对象
max_page_size = 5
#关键字 page http://www.t.com/api/v1/page/?page=2
page_query_param = 'page' class PagerView(APIView):
def get(self, request, *args, **kwargs):
#获取所有数据
roles = models.Role.objects.all()
#获取分页对象
pg = MyPagerNumberPagination()
#在数据库中获取分页数据
pager_roles = pg.paginate_queryset(queryset=roles, request=request,views=self)
#对分页数据进行序列化
ser = PagerSerializer(instance=pager_roles,many=True)
#返回一个response对象 里面带上一页下一页的url
return pg.get_paginated_response(ser.data) b. 分页,在n个位置,向后查看n条数据 from rest_framework.pagination import LimitOffsetPagination
class MyLimitOffsetPagination(LimitOffsetPagination):
default_limit = 2 #每页显示几个对象
#关键字 size http://www.t.com/api/v1/page/?offset=4&limit=5 从第4个开始向后取5条
#关键字 limit 从第几个开始向后取几条
limit_query_param = 'limit'
#关键字 offset 从第几个开始
offset_query_param = 'offset'
#最多向后显示限制5
max_limit = 5 class PagerView(APIView):
def get(self, request, *args, **kwargs):
#获取所有数据
roles = models.Role.objects.all()
#获取分页对象
pg = MyLimitOffsetPagination()
#在数据库中获取分页数据
pager_roles = pg.paginate_queryset(queryset=roles, request=request,views=self)
#对分页数据进行序列化
ser = PagerSerializer(instance=pager_roles,many=True)
#返回一个response对象 里面带上一页下一页的url
return pg.get_paginated_response(ser.data) c. 加密分页,上一页和下一页
from rest_framework.pagination import CursorPagination
class MyCursorPagination(CursorPagination):
page_size = 2 #每页显示几个对象
#关键字 size http://www.t.com/api/v1/page/?cursor=3IUSE&¥@*#GEE
#关键字 cursor
cursor_query_param = 'cursor'
#排序规则 使用id来排序 -号是倒序
ordering = '-id'
#最多向后显示限制5
cursor_size_query_param = None
max_page_size =None class PagerView(APIView):
def get(self, request, *args, **kwargs):
#获取所有数据
roles = models.Role.objects.all()
#获取分页对象
#加密http://www.t.com/api/v1/page/?cursor=3IUSE&¥@*#GEEW 页码加了密的
pg = MyCursorPagination(order='id')
#在数据库中获取分页数据
pager_roles = pg.paginate_queryset(queryset=roles, request=request,views=self)
#对分页数据进行序列化
ser = PagerSerializer(instance=pager_roles,many=True)
#返回一个response对象 里面带上一页下一页的url
return pg.get_paginated_response(ser.data)

  

最新文章

  1. [转] 《ES6标准入门》读书笔记
  2. logback 配置详解(一)
  3. RAC 环境下的重要参数
  4. PHP之数组函数归类
  5. 基于redis 内存数据库简单使用
  6. iScroll 下拉刷新
  7. JavaWeb三大组件(Servlet,Filter,Listener 自己整理,初学者可以借鉴一下)
  8. AOJ2249最短路+最小费用
  9. python day1 基本语法作业
  10. 新概念英语(1-59)Is that all
  11. python数据类型之基础进阶
  12. 2017 ACM/ICPC(西安)赛后总结
  13. (整理)SQL Server 2008 CDC 功能使用
  14. Spark_RDD之简单Java函数接口
  15. 【转载】关闭XenServer中挂起(hang)虚机的方法
  16. 一些常见修改命令(针对ubuntu 14.04 持续更新中...)
  17. scala 基本语法
  18. 2018.09.30 bzoj3551:Peaks加强版(dfs序+主席树+倍增+kruskal重构树)
  19. linux,强大的history命令
  20. web测试——完结感言

热门文章

  1. Bitmap之getDensity和setDensity函数
  2. removeEntry
  3. UI——DOM
  4. 阶段5 3.微服务项目【学成在线】_day16 Spring Security Oauth2_02-用户认证技术方案-单点登录
  5. java大文件下载+断点续传
  6. python基础之坑爹正则表达式
  7. NOIp 2009:靶形数独
  8. 判断scrollView的滑动方向(二)
  9. Reporting Service 2016 匿名访问配置
  10. Python函数或者类的时间参数的默认值设为datetime.date.today()引起的问题