rest_framework中的分页:
数据量很大时,原生sql的分页查询当数据量越来越大,对数据库的压力也越来越大,在rest_framework中分页可以记住当前页
最大值,最小值,当下次分页根据大于或者小于他记住的值来做,但是url中可以用户自己输入多少页,所以可以使用CursorPagination类
对页码进行加密。
from rest_framework.pagination import PageNumberPagination,LimitOffsetPagination,CursorPagination
自定义分页
class MyPageNumberpagernation(PageNumberPagination):
#每页显示的数据条数
page_size = 2
#在命令行用size=xx可以自定义每页显示的数据条数
page_size_query_param = 'size'
#每页最大显示的数据条数
max_page_size = 5
#命令行page=xx,查看第几页
page_query_param = 'page'
#limit offset的使用
class MyLimitOffsetpagernation(LimitOffsetPagination):
#默认显示从offset之后显示2条
default_limit = 2
limit_query_param = 'limit'
#位置,在命令行offset=2,表示从第三条数据开始显示
offset_query_param = 'offset'
#从offset之后最多显示5条
max_limit = 5
#页码进行加密,能够防止用户在命令行修改页码
class MyCursorpagernation(CursorPagination):
#命令行参数
cursor_query_param = 'cursor'
#每一页显示两个
page_size = 2
#排序规则,按照id升序排列,倒叙在id前面加-
ordering = 'id'
page_size_query_param = None
max_page_size = None
offset_cutoff = 1000
class xxx(APIView):
def xx(self,request,*args,**kwargs):
pg = Mypagernation()
#返回的分页数据上显示上一页,下一页和一共有多少条数据,不是必需的
return pg.get_paginated_response(xx.data)