您好,登录后才能下订单哦!
这篇文章主要讲解了“Django drf分页器的使用方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Django drf分页器的使用方法”吧!
当后台返回的数据过多时,我们就要配置分页器,比如一页最多只能展示10条等等,drf中默认配置了3个分页面
PageNumberPagination:基础分页器,性能略差
LimitOffsetPagination:偏移分页器
CursorPagination:游标分页器,性能强大
基础分页器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:
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
游标分页器跟基础分页器用法差不多,只是游标分页的针对下一页数据的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分页器的使用方法这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。