Django|Django drf分页器的使用详解

前言 当后台返回的数据过多时,我们就要配置分页器,比如一页最多只能展示10条等等,drf中默认配置了3个分页面

  • PageNumberPagination:基础分页器,性能略差
  • LimitOffsetPagination:偏移分页器
  • CursorPagination:游标分页器,性能强大
PageNumberPagination 基础分页器PageNumberPagination,数据量越大性能越差。
首先我们在app中创建一个pagination.py文件,然后自定义一个分页器类,继承自PageNumberPagination
from rest_framework.pagination import PageNumberPaginationclass MyPageNumberPagination(PageNumberPagination):"""普通分页,数据量越大性能越差"""# 默认页面展示的条数page_size = 3# 前端访问url需要添加 ?page=页码page_query_param = 'page'# 用户自定义返回的条数,格式?page_size=页数page_size_query_param = "page_size"# 用户自定义返回的条数最大限制,数值超过5也只展示5条max_page_size = 5

如果我们需要局部配置则在类视图中访问使用pagination_class = MyPageNumberPagination即可
如果是全局配置,则在settings.py文件中配置如下:
REST_FRAMEWORK = {'DEFAULT_PAGINATION_CLASS': 'api.pagination.MyPageNumberPagination',}

【Django|Django drf分页器的使用详解】之后我们访问url只需在后面加入?page=页码数即可
比如http://127.0.0.1:8000/api/cars/?page=2,代表访问第二页的数据,数据的条数默认为page_size的值
比如http://127.0.0.1:8000/api/cars/?page=2&page_size=5,代表访问第二页的数据,用户自定义返回的条数为5条
LimitOffsetPagination 首先我们自定义一个分页器类,继承自LimitOffsetPagination
class MyLimitOffsetPagination(LimitOffsetPagination):# url后面跟limit请求参数,limit_query_param = 'limit'# url后面跟offset请求参数offset_query_param = 'offset'# 最大限制20条max_limit = 20# 默认限制3条default_limit = 3

之后我们访问url只需要在后面加入?limit=10即可
比如http://127.0.0.1/api/cars/?limit=10代表访问的数据最多展示10条,如果你limit的值>max_limit,那么还是按照max_limit的值来展示数据的条数
比如http://127.0.0.1/api/cars/?offset=1,这里没有limit参数,所以默认展示3条,offset=1代表从数据库列表中提取数据的时候,是从下标1开始提取,比如提取的数据列表是['test1', 'test2', 'test3', 'test4'],本来我们默认提取前3条,但是你加上offset=1后,他是从列表下标为1开始提取,所以最后提取的数据是test2test3test4
CursorPagination 游标分页器跟基础分页器用法差不多,只是游标分页的针对下一页数据的url进行了加密
首先我们自定义一个分页器类,继承自CursorPagination
class MyCursorPagination(CursorPagination):"""Cursor 光标分页 性能高,安全"""page_size = 10page_size_query_param = "page_size"max_page_size = 20ordering = '-price'

如果我们视图中使用了排序过滤filter_backends = [OrderingFilter],那么我们在访问url的时候必须携带参数?ordering=需要排序的字段
以上就是Django drf分页器的使用的详细内容,更多关于Django drf分页器的资料请关注脚本之家其它相关文章!

    推荐阅读