Django rest-framework框架-组件之分页
2024-08-24 05:13:11
分页:
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)
最新文章
- [转] 《ES6标准入门》读书笔记
- logback 配置详解(一)
- RAC 环境下的重要参数
- PHP之数组函数归类
- 基于redis 内存数据库简单使用
- iScroll 下拉刷新
- JavaWeb三大组件(Servlet,Filter,Listener 自己整理,初学者可以借鉴一下)
- AOJ2249最短路+最小费用
- python day1 基本语法作业
- 新概念英语(1-59)Is that all
- python数据类型之基础进阶
- 2017 ACM/ICPC(西安)赛后总结
- (整理)SQL Server 2008 CDC 功能使用
- Spark_RDD之简单Java函数接口
- 【转载】关闭XenServer中挂起(hang)虚机的方法
- 一些常见修改命令(针对ubuntu 14.04 持续更新中...)
- scala 基本语法
- 2018.09.30 bzoj3551:Peaks加强版(dfs序+主席树+倍增+kruskal重构树)
- linux,强大的history命令
- web测试——完结感言
热门文章
- Bitmap之getDensity和setDensity函数
- removeEntry
- UI——DOM
- 阶段5 3.微服务项目【学成在线】_day16 Spring Security Oauth2_02-用户认证技术方案-单点登录
- java大文件下载+断点续传
- python基础之坑爹正则表达式
- NOIp 2009:靶形数独
- 判断scrollView的滑动方向(二)
- Reporting Service 2016 匿名访问配置
- Python函数或者类的时间参数的默认值设为datetime.date.today()引起的问题