Django drf分页器的使用详解
作者:Silent丿丶黑羽
前言
当后台返回的数据过多时,我们就要配置分页器,比如一页最多只能展示10条等等,drf
中默认配置了3个分页面
- PageNumberPagination:基础分页器,性能略差
- LimitOffsetPagination:偏移分页器
- CursorPagination:游标分页器,性能强大
PageNumberPagination
基础分页器PageNumberPagination
,数据量越大性能越差。
首先我们在app
中创建一个pagination.py
文件,然后自定义一个分页器类,继承自PageNumberPagination
:
from rest_framework.pagination import PageNumberPagination class 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', }
之后我们访问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开始提取,所以最后提取的数据是test2
和test3
和test4
CursorPagination
游标分页器跟基础分页器用法差不多,只是游标分页的针对下一页数据的url
进行了加密
首先我们自定义一个分页器类,继承自CursorPagination
:
class MyCursorPagination(CursorPagination): """ Cursor 光标分页 性能高,安全 """ page_size = 10 page_size_query_param = "page_size" max_page_size = 20 ordering = '-price'
如果我们视图中使用了排序过滤filter_backends = [OrderingFilter]
,那么我们在访问url
的时候必须携带参数?ordering=需要排序的字段
。
以上就是Django drf分页器的使用的详细内容,更多关于Django drf分页器的资料请关注脚本之家其它相关文章!