django-rest-framework实现三种分页

本文介绍了Django-rest-framework中的三种分页方法:PageNumber分页、LimitOffset分页和Cursor分页。详细解释了每种分页的工作原理,并通过示例展示了如何在接口中实现和使用这些分页器,以优化数据返回和提高用户体验。
摘要由CSDN通过智能技术生成

我们通常在使用Django为前端或者用户提供接口的时候,时常会遇到返回大量数据信息的情况,比如:有1000条用户信息,有1000条新闻文章,有1000条商品信息等等。但是我们不可能将所有数据从数据库获取后一股脑的全部返回,这样相当不好,会增大服务器压力,同时也会增加前端渲染压力,也不方便前端或者用户使用。

这种情况下,我们就需要用到分页处理。顾名思义,就是将大量数据进行分页,每页只有少量数据,在用户希望通过接口获取数据时,只需要在url中加入指定的参数,就可以获取指定页的数据,使用相当方便。

在Django中,我们通常使用django-rest-framework这个插件进行分页,它提供了三种分页器PageNumber分页(普通分页)、LimitOffset分页(偏移分页)、Cursor分页(加密分页),我们可以根据实际情况选择合适的分页器,下面来依次介绍这三种分页器。

一、PageNumber分页

class TestApi1(APIView):
    """PageNumber分页"""
    def get(self, request):
        page = PageNumberPagination()  # 创建普通分页器对象
        page.page_size = 3  # 设置每页数据条数
        articles = Articles.get_articles()  # 获取所有文章数据
        ret_page = page.paginate_queryset(articles, request, self)  # 用实例化的分页器对所有数据进行分页,并且返回当前页的数据的列表
        articles_serializer = ArticlesSerializers(ret_page, many=True)  # 将当前页数据序列化
        data = {
            'count': articles.count(),  # 获取数据总数
            'previous': page.get_previous_link(),  # 获取上一页链接,如果没有则是None
            'next': page.get_next_link(),  # 获取下一页链接,如果没有则是None
            'results': articles_serializer.data,  # 当前页的序列化数据
 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值