分页器(三种)如何使用*****

复制代码
1 内置了三种分页器
    -PageNumberPagination:普通分页
    -LimitOffsetPagination:偏移分页
    -CursorPagination:游标分页
2 APIView和GenericAPIView+ListModelMixin

3 GenericAPIView+ListModelMixin的分页模式
    
4 PageNumberPagination:普通分页(用的最多)
    -page_size = api_settings.PAGE_SIZE  # 每页显示多少条
    -page_query_param = 'page'           # 查询参数
    -page_size_query_param = size        # 查询的时候指定每页显示多少条
    -max_page_size = 10                # 每页最多显示多少条
    
    -使用方式:
        -定义一个类,继承PageNumberPagination
        -重写四个属性
        -在继承了GenericAPIView+ListModelMixin视图类中配置
            pagination_class = MyPageNumberPagination
        -查询
            http://127.0.0.1:8000/students/?page=1&size=5


示例:
from rest_framework.pagination import PageNumberPagination as DRFPageNumberPagination


class PageNumberPagination(DRFPageNumberPagination):
page_size = 20
page_query_param = 'page'
max_page_size = 20
page_size_query_param = 'page_size'
 

 

            
5 LimitOffsetPagination:偏移分页
    -default_limit = api_settings.PAGE_SIZE  # 默认条数
    -limit_query_param = 'limit'             # 查询时,指定查询多少条
    -offset_query_param = 'offset'           # 查询时,指定的起始位置是哪 
    -max_limit = None                        # 查询时,最多返回多少条
    -使用方式:
        -定义一个类,继承LimitOffsetPagination
        -重写四个属性
        -在继承了GenericAPIView+ListModelMixin视图类中配置
            pagination_class = MyPageNumberPagination
        -查询
        http://127.0.0.1:8000/students/?limit=100&offset=1
6 CursorPagination:游标分页(速度块)
    -cursor_query_param = 'cursor'  # 查询的时候,指定的查询方式
    -page_size = api_settings.PAGE_SIZE # 每页显示多少条
    -ordering = '-created'   # 排序方式
    -page_size_query_param = size  # 查询的时候指定每页显示多少条
    -max_page_size = None          #每页最多显示多少条
    -使用方式:
            -定义一个类,继承LimitOffsetPagination
            -重写四个属性
            -在继承了GenericAPIView+ListModelMixin视图类中配置
                pagination_class = MyPageNumberPagination
            -查询
            http://127.0.0.1:8000/students/?limit=100&offset=1
                    
                    
 7 APIView的分页模式
    -新建一个类,继承普通分页,重写四个属性
    -视图类写法如下
    class StudentApiView(APIView):
        def get(self,request):
            student_list=Student.objects.all()
            page=MyPageNumberPagination()# 实例化得到对象
            # 只需要换不同的分页类即可
            res=page.paginate_queryset(student_list,request,self)# 开始分页
            ser=StudentSerializer(res,many=True)
            return page.get_paginated_response(ser.data) # 返回数据
复制代码

 

示例:

复制代码
  # 事件过滤
    def get(self, request):
        params = request.query_params
        event = search_events(request, params)
        page_class = PageNumberPagination()
        page_set = page_class.paginate_queryset(queryset=event, request=request)
        ser = serializer.ScreenSerializer(instance=page_set, many=True)
        res_data = page_class.get_paginated_response(ser.data)
        return res_data
复制代码

 

解读:

复制代码
获取请求中的查询参数:从 request.query_params 中提取客户端传入的所有查询参数。

搜索事件:调用名为 search_events 的函数,该函数接受请求对象和查询参数作为输入,返回满足条件的事件查询集(queryset)。

分页设置:创建一个 PageNumberPagination 类的实例(page_class),这是 Django REST Framework 提供的一个分页器类。然后通过调用 paginate_queryset 方法对查询集进行分页处理,它会根据请求信息(如当前页数、每页条目数等)返回当前页面所需的事件子集。

序列化:使用 ScreenSerializer 将分页后的查询集实例序列化为 JSON 格式的数据,由于分页后得到的是一个列表,所以需要指定 many=True 参数。

构建分页响应:调用分页器实例的 get_paginated_response 方法,将序列化后的数据包装成包含分页信息的响应数据结构,如总页数、当前页码、下一页链接等。

返回响应:最后返回包含了分页数据和元数据的响应给客户端
复制代码

 

posted @   朱饱饱  阅读(107)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示