其他分享
首页 > 其他分享> > DRF之分页

DRF之分页

作者:互联网

分页概述

  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