前言
当后台返回的数据过多时,我们就要配置分页器,比如一页最多只能展示10条等等, drf 中默认配置了3个分页面
PageNumberPagination:基础分页器,性能略差 LimitOffsetPagination:偏移分页器 CursorPagination:游标分页器,性能强大PageNumberPagination
基础分页器 PageNumberPagination ,数据量越大性能越差。
首先我们在 app 中创建一个 pagination.py 文件,然后自定义一个分页器类,继承自 PageNumberPagination :
from rest_framework.pagination import PageNumberPagination class MyPageNumberPagination(PageNumberPagination): """ 普通分页,数据量编程客栈越大性能越 http://HdhCmsTestcppcns测试数据 差 """ # 默认页面展示的条数 page_size = 3 # 前端访问url需要添加 ?page=页码 page_query_param = 'page' 编程客栈 # 用户自定义返回的条数,格式?page_siz编程客栈e=页数 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分页器的资料请关注我们其它相关文章!
查看更多关于Django drf分页器的使用详解的详细内容...