restframework中的分页

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)

你可能感兴趣的:(restframework中的分页)