restframework中的分页

本文深入探讨了在RESTful API开发中如何有效利用Django REST framework提供的分页功能,包括PageNumberPagination、LimitOffsetPagination和CursorPagination。通过自定义分页类,可灵活调整每页显示的数据数量,优化用户体验,减轻数据库负担。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值