ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

DRF之分页

2022-04-09 11:33:30  阅读:149  来源: 互联网

标签:分页 page 一页 PageNumberPagination DRF class size


分页概述

  5个接口中,只有查询所以,涉及到分页。

  pc端是下一页,下一页的形式;如果在app、小程序中展示的形式是下拉加载下一个的形式

  分页默认提供了三种方式:PageNumberPagination、LimitOffsetPagination、CursorPagination

  导入

from rest_framework.pagination import PageNumberPagination, LimitOffsetPagination, CursorPagination 

PageNumberPagination

  基本分页,按照页码数,每页显示多少条          

  第一步:  

    写一个类,继承PageNumberPagination,重写四个类属性

class CommonPageNumberPagination(PageNumberPagination):
    page_size = 3   # 每页显示条数,默认
    page_query_param = 'page'  # 查询条件叫page --> ?page=3
    page_size_query_param = 'size'   每页显示的条数的查询条件 ?page=3&size=9 查询第三页,第三页显示9条
    max_page_size = 5   # 每页最大线上多少条,?page=3&size=9,最终还是显示5条

  第二步:配置在视图类上,必须继承GenericAPIView才有

from .page import CommonPageNumberPagination as PageNumberPagination
from rest_framework.filters import OrderingFilter
from rest_framework.filters import SearchFilter


class BookView(GenericViewSet, ListModelMixin):
    queryset = Book.objects.all()
    serializer_class = BookSerizlizer
    filter_backends = [SearchFilter, OrderingFilter]
    ordering_fields = ['price', 'id']
    search_fields = ['name', 'author']
    # 不要放在列表中,分页只能按照一种方式,不能按照多种方式,必须继承GenericViewSet才能使用
    pagination_class = PageNumberPagination

   第三步:查询方式

http://127.0.0.1:8000/books/?page=2&size=8

 LimitOffsetPagination

  偏移分页

  第一步:写一个类,继承LimitOffsetPagination,重写四个类属性

class CommonLimitOffsetPagination(LimitOffsetPagination):
    default_limit = 2  # 默认一页获取条数 2  条
    limit_query_param = 'limit'   # ?limit=3  获取三条,如果不传,就用上面的默认两条
    offset_query_param = 'offset'  ?limit=3&offset=2  从第2条开始,获取3条    ?offset=3:从第三条开始,获取2条
    max_limit = 5  # 最大显示条数 5 条

  第二步:配置在视图类上,必须继承GenericAPIView才有

pagination_class = LimitOffsetPagination

   第三步:查看方式

http://127.0.0.1:8000/books/?limit=2&offset=1

 CursorPagination

  游标分页

  第一步:写一个类,继承CursorPagination,重写三个类属性

class CommonCursorPagination(CursorPagination):
    page_size = 2  # 每页显示2条    
    cursor_query_param = 'cursor'  # 查询条件  ?cursor=sdafdase
    ordering = 'id'  # 排序规则,使用id排序

  第二步:配置在视图类上,必须继承GenericAPIView才有

pagination_class = CommonCursorPagination

   第三步:查询方式

http://127.0.0.1:8000/books/?cursor=cD02

   第三种方式和上面两种的区别

    上面两种,可以从中间位置获取某一页,Cursor方式只能上一页和下一页

    上面这两种在获取某一页的时候,都需要从开始过滤到要取的页面数的数据

    下面这种方式,先排序,内部维护了一个游标,游标只能选择往前走或往后走,在取某一页的时候,不需要过滤之前的数据

  特点及应用场景

    这种分页方式特殊,只能选择上一页和下一页,不能指定某一页,但是速度快,适合大数据量的分页

    大数据量和app分页---》下拉加载下一页,不需要指定跳转到第几页

标签:分页,page,一页,PageNumberPagination,DRF,class,size
来源: https://www.cnblogs.com/zhaoyuanshi/p/16121253.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有