list 分页_DjangoRestFrameWork 分页组件

本文详细介绍了Django REST framework(DRF)中的分页机制,包括DRF如何封装Django的分页功能,以及如何配置全局分页和自定义分页。通过具体的代码示例,展示了如何在实际项目中应用这些分页方式。

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

768dae91af9bff0453d3c48c5021e63a.png

a315c355ba9d0dcae7c76d420a53d1dc.png

使用DRF的分页之前呢,先来了解下Django自带的分页功能

fromdjango.core.paginator import Paginator,Page
# 一个Page中有  object_list代表当前页的所有对象
#has_next 是不是有下一页
#has_previous 是否有上一页
#next_page_number 下一页的编号
#previous_page_number 上一页的编号
#self.number 当前页的编号
#self.paginator 当前页的分页器
 
# 一个Paginator中的object_list 代表所有未分页对象
#self.per_page 每一页有几个对象
#get_page(self, number): 从分页器中取第几页
#page_range(self): 返回分页列表

Django原生通过Paginator与Page对象完成了分页相关实现

一、DRF对Django的分页的封装

1、在rest_framework.pagination.py 总使用BasePagination类对响应的分类方法进行了实现,其中最主要的是paginate_queryset与get_paginated_response方法,通过类PageNumberPagination、LimitOffsetPagination、CursorPagination实现了基本的分页形式。

当然我们也可以对必要的分页实现进行重写

二、配置全局分页

在settings.py中配置全局分页器

REST_FRAMEWORK= {
    # 全局配置分页
    # 'DEFAULT_PAGINATION_CLASS':'rest_framework.pagination.LimitOffsetPagination',
    # 'DEFAULT_PAGINATION_CLASS':'rest_framework.pagination.PageNumberPagination',
    # 'PAGE_SIZE': 2,
}

在rest_framework.generics.py 中的GenericAPIView类中使用pagination_class= api_settings.DEFAULT_PAGINATION_CLASS声明了默认使用全局分页配置

三、自定义分页

fromrest_framework import pagination
 
classMyPagination(pagination.PageNumberPagination):
    page_size = 3
    page_query_param = 'p'
    page_size_query_param = 'num'

四、视图中配置自定义分页

classCategoryViewSets(viewsets.ModelViewSet):
    queryset = Category.objects.all()
    serializer_class = CategorySerizlizer
    #配置视图类使用的分页
    # pagination_class = MyPagination

4c51d235c7d9c000fd85141a35e6f3be.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值