DRF的分页

数据库有几千万条数据,这些数据需要展示,不可能直接从数据库把数据全部读取出来,

这样会给内存造成特别大的压力,有可能还会内存溢出,所以希望一点一点的取,那展示的时候也是一样的,总是要进行分页显示,

DRF给提供了三种分页方式,看下他们都是什么样的~~

分页组件的使用

DRF提供的三种分页

  1. 全局配置
  2. REST_FRAMEWORK = {
  3. 'PAGE_SIZE': 2
  4. }

pageNumber分页

http://127.0.0.1:8000/book?page=2&size=1

utils/pagination.py

自定义分页类

  1. from rest_framework.pagination import PageNumberPagination, LimitOffsetPagination, CursorPagination
  2.  
  3. class MyPagination(PageNumberPagination):
  4. # xxxx?page=1&size=2
  5. page_size = 1
  6. page_query_param = "page"
  7. page_size_query_param = "size"
  8. max_page_size = 3

pageDemo/views.py

  1. from utils.pagination import MyPagination
  2. class BookView(APIView):
  3.  
  4. def get(self, request):
  5. queryset = Book.objects.all()
  6. # 1,实例化分页器对象
  7. page_obj = MyPagination()
  8. # 2,调用分页方法去分页queryset
  9. page_queryset = page_obj.paginate_queryset(queryset, request, view=self)
  10. # 3,把分页好的数据序列化返回
  1. ser_obj = BookSerializer(page_queryset, many=True)
  2. # 4, 带着上一页下一页连接的响应,返回带超链接 需返回的时候用内置的响应方法
  3. return page_obj.get_paginated_response(ser_obj.data) #超链接
  1. # return Response(ret.data)

limitOffset分页

自定义分页类

  1. class MyPagination(LimitOffsetPagination):
  2.  
  3. default_limit = 1
  4. limit_query_param = "limit" # 向后找多少条
  5. offset_query_param = "offset" # 从第几个开始找
  6. max_limit = 3

视图

  1. # 视图和上面的大体一致
  2. # 只有用的分页类不同,其他都相同
  3. class BookView(APIView):
  4. def get(self, request):
  5. book_list = Book.objects.all()
  6. # 分页
  7. page_obj = MyLimitOffset()
  8. page_article = page_obj.paginate_queryset(queryset=book_list, request=request, view=self)
  9.  
  10. ret = BookSerializer(page_article, many=True)
  11. # return Response(ret.data)
  12. # 返回带超链接 需返回的时候用内置的响应方法
  13. return page_obj.get_paginated_response(ret.data)

CursorPagination游标分页

加密游标的分页 把上一页和下一页的id记住

自定义分页类

  1. class MyPagination(CursorPagination):
  2.  
  3. cursor_query_param = "cursor"
  4. page_size = 2
  5. ordering = "-id"

视图

  1. class BookView(APIView):
  2. def get(self, request):
  3. book_list = Book.objects.all()
  4. # 分页
  5. page_obj = MyCursorPagination()
  6. page_article = page_obj.paginate_queryset(queryset=book_list, request=request, view=self)
  7.  
  8. ret = BookSerializer(page_article, many=True)
  9. # return Response(ret.data)
  10. # 返回带超链接 需返回的时候用内置的响应方法
  11. return page_obj.get_paginated_response(ret.data)

对url进行了加密,还支持对数据排序

7

drf7 分页组件的更多相关文章

  1. 基于Vue.js的表格分页组件

    有一段时间没更新文章了,主要是因为自己一直在忙着学习新的东西而忘记分享了,实在惭愧. 这不,大半夜发文更一篇文章,分享一个自己编写的一个Vue的小组件,名叫BootPage. 不了解Vue.js的童鞋 ...

  2. angular-ui分页组件

    http://angular-ui.github.io/bootstrap/#/pagination 分页组件只提供生成分页按钮,数据的显示需要使用ng-repeat, 注意设置 items-per- ...

  3. asp.net mvc4+mysql做一个简单分页组件(部分视图)

    在开始做mysql分页功能组件前,便设定的是要有一定可复用性.先在项目里Views文件夹下右键新建名为_PaginationComponent.cshtml,这里html及css我采用的bootstr ...

  4. ReactJS实现的通用分页组件

    大家多少都自己写过各种版本的分页工具条吧,像纯服务版的,纯jsWeb板的,Angular版的,因为这个基础得不能再基础的功能太多地方都会用到,下面我给出以个用ReactJS实现的版本,首先上图看下效果 ...

  5. 基于vue2.0的分页组件开发

    今天安排的任务是写基于vue2.0的分页组件,好吧,我一开始是觉得超级简单的,但是越写越写不出来,写的最后乱七八糟的都不知道下句该写什么了,所以重新捋了思路,小结一下- 首先写组件需要考虑: 要从父组 ...

  6. 基于Vue封装分页组件

    使用Vue做双向绑定的时候,可能经常会用到分页功能 接下来我们来封装一个分页组件 先定义样式文件 pagination.css ul, li { margin: 0px; padding: 0px;} ...

  7. [js开源组件开发]ajax分页组件

    ajax分页组件 我以平均每一周出一个开源的js组件为目标行动着,虽然每个组件并不是很庞大,它只完成某一个较小部分的工作,但相信,只要有付出,总会得到回报的.这个组件主要完成分页的工作. 这张图里显示 ...

  8. javascript 分页组件

    自己写的一个简单的分页组件,主要功能还有实现都在JS中,html页面中只用增加一个放置生成分页的DIV,并给定容器的id. html结构如下: <ul class="paginatio ...

  9. 一步步编写avalon组件02:分页组件

    本章节,我们做分页组件,这是一个非常常用的组件.grid, listview都离不开它.因此其各种形态也有. 本章节教授的是一个比较纯正的形态,bootstrap风格的那种分页栏. 我们建立一个ms- ...

随机推荐

  1. 普通PC机支持内存128G,单条32G内存

    以前,不管是英特尔还是AMD的消费级平台支持内存容量大多都是64GB,这一现状被英特尔公司去年推出的第九代酷睿而改变.第九代酷睿最大支持128GB内存,虽然只是简单的提高了内存容量,对大多数电脑用户而 ...

  2. Python全栈开发记录_第三篇(linux(ubuntu)的操作)

    该篇幅主要记录linux的操作,常见就不记录了,主要记录一些不太常用.难用或者自己忘记了的点. 看到https://www.cnblogs.com/resn/p/5800922.html这篇幅讲解的不 ...

  3. Linux 查看各文件夹大小命令du -h --max-depth=1

    du [-abcDhHklmsSx] [-L <符号连接>][-X <文件>][--block-size][--exclude=<目录或文件>] [--max-de ...

  4. 创建Flask实例对象时的参数和app.run()中的参数

    app=Flask(name,static_folder=“static”,static_url_path="/aaa",template_folder=“templates”) ...

  5. PL2303 USB转串口 com

    PL2303 USB转串口 com PL-2303 XA/HXA chip http://www.prolific.com.tw/US/ShowProduct.aspx?p_id=225&pc ...

  6. K8s之Etcd

    Etcd是一个开源的.高可用的.分布式的键值对数据存储系统,提供共享配置.服务的注册和发现.etcd与zookeeper相比算是轻量级系统,两者的一致性协议也一样,etcd的raft比zookeepe ...

  7. mongodb-MYSQL

    #encoding:utf8 import pymongoimport MySQLdbimport randomdef GetMongoData(): MyQuery = Mongo_Tab.find ...

  8. Failed to resolve:com.android.support:appcompat-v7:报错处理

    既然是版本问题,那就的先去了解自己的电脑安装的SDK工具版本,点开SDK Manager图标,然后选中Updates就可以看到了 这里我的 sdk 工具版本就是26.1.1了 报错是因为自己的andr ...

  9. 36. Valid Sudoku 判断九九有效的数独

    [抄题]: Determine if a 9x9 Sudoku board is valid. Only the filled cells need to be validated according ...

  10. LAB2

    任务1: 效果:HelloWorld 好像完全按视频做就行了 学会了:把glassfish改好了,能跑 没学会:视频里的解说不懂在干嘛,得再看看 任务2 效果:intersetingpicture要求 ...