Django Rest Framework 分页组件
为什么要使用分页
其实这个不说大家都知道,大家写项目的时候也是一定会用的,
我们数据库有几千万条数据,这些数据需要展示,我们不可能直接从数据库把数据全部读取出来,
这样会给内存造成特别大的压力,有可能还会内存溢出,所以我们希望一点一点的取,
那展示的时候也是一样的,总是要进行分页显示,我们之前自己都写过分页。
那么大家想一个问题,在数据量特别大的时候,我们的分页会越往后读取速度越慢,
当有一千万条数据,我要看最后一页的内容的时候,怎么能让我的查询速度变快。
DRF给我们提供了三种分页方式,我们看下他们都是什么样的~~
分页组件的使用
DRF提供的三种分页
rest_framework.pagination PageNumberPagination,LimitOffsetPagination,CursorPagination
全局配置
<div class="cnblogs_code">
REST_FRAMEWORK =: 2
display: none;" onclick="cnblogs_code_hide('473ffde6-6e9c-4f52-9b38-8d7c333e7ad1',event)" src="/res/2019/02-14/22/405b18b4b6584ae338e0f6ecaf736533.gif" alt="">
= 2 显示多少条
page_size_query_param = 显示条数的参数
page_query_param = 页码的参数
max_page_size = None 页码数限制
自定义分页类
display: none;" onclick="cnblogs_code_hide('fe30dab6-a857-417a-97ea-93803797a798',event)" src="/res/2019/02-14/22/405b18b4b6584ae338e0f6ecaf736533.gif" alt="">
=分页
page_obj == page_obj.paginate_queryset(queryset=book_list,request=request,view= ret </span>= BookSerializer(page_article,many=<span style="color: #000000;">True)
</span><span style="color: #0000ff;">return</span> Response(ret.data)</pre>
display: none;" onclick="cnblogs_code_hide('662eae2c-f4cb-4384-a0ee-ee6ce8731b0b',event)" src="/res/2019/02-14/22/405b18b4b6584ae338e0f6ecaf736533.gif" alt="">
ret </span>= BookSerializer(page_article,many=<span style="color: #000000;">True)
</span><span style="color: #008000;">#</span><span style="color: #008000;"> return Response(ret.data)</span>
<span style="color: #008000;">#</span><span style="color: #008000;"> 返回带超<a href="/tag/lianjie/" target="_blank" class="keywords">链接</a> 需返回的时候用内置的响应<a href="/tag/fangfa/" target="_blank" class="keywords">方法</a></span>
<span style="color: #0000ff;">return</span> page_obj.get_paginated_response(ret.data)</pre>
页码链接的响应
display: none;" onclick="cnblogs_code_hide('af9f6086-ed9d-416d-91e1-71bf8ec293f9',event)" src="/res/2019/02-14/22/405b18b4b6584ae338e0f6ecaf736533.gif" alt="">
= 1aram = aram = = 999
自定义的分页类
display: none;" onclick="cnblogs_code_hide('cf06568f-ea65-4ea6-a3a3-1eeaa3f485e9',event)" src="/res/2019/02-14/22/405b18b4b6584ae338e0f6ecaf736533.gif" alt="">
分页类不同,其他都相同
=分页
page_obj == page_obj.paginate_queryset(queryset=book_list,many=
链接 需返回的时候用内置的响应方法
page_obj.get_paginated_response(ret.data)
<div class="cnblogs_code" onclick="cnblogs_code_show('ef50a035-364f-4154-bc85-06813fe82737')">
<img id="code_img_closed_ef50a035-364f-4154-bc85-06813fe82737" class="code_img_closed" src="/res/2019/02-14/22/1c53668bcee393edac0d7b3b3daff1ae.gif" alt=""><img id="code_img_opened_ef50a035-364f-4154-bc85-06813fe82737" class="code_img_opened" style="display: none;" onclick="cnblogs_code_hide('ef50a035-364f-4154-bc85-06813fe82737',event)" src="/res/2019/02-14/22/405b18b4b6584ae338e0f6ecaf736533.gif" alt=""><div id="cnblogs_code_open_ef50a035-364f-4154-bc85-06813fe82737" class="cnblogs_code_hide">