这篇教程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',} 之后我们访问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分页器的资料请关注51zixue.net其它相关文章! python学生信息管理系统实现代码 Opencv Python实现两幅图像匹配 |