drf7 分页组件
DRF的分页
数据库有几千万条数据,这些数据需要展示,不可能直接从数据库把数据全部读取出来,
这样会给内存造成特别大的压力,有可能还会内存溢出,所以希望一点一点的取,那展示的时候也是一样的,总是要进行分页显示,
DRF给提供了三种分页方式,看下他们都是什么样的~~
分页组件的使用
DRF提供的三种分页
- 全局配置
- REST_FRAMEWORK = {
- 'PAGE_SIZE': 2
- }
pageNumber分页
http://127.0.0.1:8000/book?page=2&size=1
utils/pagination.py
自定义分页类
- from rest_framework.pagination import PageNumberPagination, LimitOffsetPagination, CursorPagination
- class MyPagination(PageNumberPagination):
- # xxxx?page=1&size=2
- page_size = 1
- page_query_param = "page"
- page_size_query_param = "size"
- max_page_size = 3
pageDemo/views.py
- from utils.pagination import MyPagination
- class BookView(APIView):
- def get(self, request):
- queryset = Book.objects.all()
- # 1,实例化分页器对象
- page_obj = MyPagination()
- # 2,调用分页方法去分页queryset
- page_queryset = page_obj.paginate_queryset(queryset, request, view=self)
- # 3,把分页好的数据序列化返回
- ser_obj = BookSerializer(page_queryset, many=True)
- # 4, 带着上一页下一页连接的响应,返回带超链接 需返回的时候用内置的响应方法
- return page_obj.get_paginated_response(ser_obj.data) #超链接
- # return Response(ret.data)
limitOffset分页
自定义分页类
- class MyPagination(LimitOffsetPagination):
- default_limit = 1
- limit_query_param = "limit" # 向后找多少条
- offset_query_param = "offset" # 从第几个开始找
- max_limit = 3
视图
- # 视图和上面的大体一致
- # 只有用的分页类不同,其他都相同
- class BookView(APIView):
- def get(self, request):
- book_list = Book.objects.all()
- # 分页
- page_obj = MyLimitOffset()
- page_article = page_obj.paginate_queryset(queryset=book_list, request=request, view=self)
- ret = BookSerializer(page_article, many=True)
- # return Response(ret.data)
- # 返回带超链接 需返回的时候用内置的响应方法
- return page_obj.get_paginated_response(ret.data)
CursorPagination游标分页
加密游标的分页 把上一页和下一页的id记住
自定义分页类
- class MyPagination(CursorPagination):
- cursor_query_param = "cursor"
- page_size = 2
- ordering = "-id"
视图
- class BookView(APIView):
- def get(self, request):
- book_list = Book.objects.all()
- # 分页
- page_obj = MyCursorPagination()
- page_article = page_obj.paginate_queryset(queryset=book_list, request=request, view=self)
- ret = BookSerializer(page_article, many=True)
- # return Response(ret.data)
- # 返回带超链接 需返回的时候用内置的响应方法
- return page_obj.get_paginated_response(ret.data)
对url进行了加密,还支持对数据排序
7
drf7 分页组件的更多相关文章
- 基于Vue.js的表格分页组件
有一段时间没更新文章了,主要是因为自己一直在忙着学习新的东西而忘记分享了,实在惭愧. 这不,大半夜发文更一篇文章,分享一个自己编写的一个Vue的小组件,名叫BootPage. 不了解Vue.js的童鞋 ...
- angular-ui分页组件
http://angular-ui.github.io/bootstrap/#/pagination 分页组件只提供生成分页按钮,数据的显示需要使用ng-repeat, 注意设置 items-per- ...
- asp.net mvc4+mysql做一个简单分页组件(部分视图)
在开始做mysql分页功能组件前,便设定的是要有一定可复用性.先在项目里Views文件夹下右键新建名为_PaginationComponent.cshtml,这里html及css我采用的bootstr ...
- ReactJS实现的通用分页组件
大家多少都自己写过各种版本的分页工具条吧,像纯服务版的,纯jsWeb板的,Angular版的,因为这个基础得不能再基础的功能太多地方都会用到,下面我给出以个用ReactJS实现的版本,首先上图看下效果 ...
- 基于vue2.0的分页组件开发
今天安排的任务是写基于vue2.0的分页组件,好吧,我一开始是觉得超级简单的,但是越写越写不出来,写的最后乱七八糟的都不知道下句该写什么了,所以重新捋了思路,小结一下- 首先写组件需要考虑: 要从父组 ...
- 基于Vue封装分页组件
使用Vue做双向绑定的时候,可能经常会用到分页功能 接下来我们来封装一个分页组件 先定义样式文件 pagination.css ul, li { margin: 0px; padding: 0px;} ...
- [js开源组件开发]ajax分页组件
ajax分页组件 我以平均每一周出一个开源的js组件为目标行动着,虽然每个组件并不是很庞大,它只完成某一个较小部分的工作,但相信,只要有付出,总会得到回报的.这个组件主要完成分页的工作. 这张图里显示 ...
- javascript 分页组件
自己写的一个简单的分页组件,主要功能还有实现都在JS中,html页面中只用增加一个放置生成分页的DIV,并给定容器的id. html结构如下: <ul class="paginatio ...
- 一步步编写avalon组件02:分页组件
本章节,我们做分页组件,这是一个非常常用的组件.grid, listview都离不开它.因此其各种形态也有. 本章节教授的是一个比较纯正的形态,bootstrap风格的那种分页栏. 我们建立一个ms- ...
随机推荐
- 普通PC机支持内存128G,单条32G内存
以前,不管是英特尔还是AMD的消费级平台支持内存容量大多都是64GB,这一现状被英特尔公司去年推出的第九代酷睿而改变.第九代酷睿最大支持128GB内存,虽然只是简单的提高了内存容量,对大多数电脑用户而 ...
- Python全栈开发记录_第三篇(linux(ubuntu)的操作)
该篇幅主要记录linux的操作,常见就不记录了,主要记录一些不太常用.难用或者自己忘记了的点. 看到https://www.cnblogs.com/resn/p/5800922.html这篇幅讲解的不 ...
- Linux 查看各文件夹大小命令du -h --max-depth=1
du [-abcDhHklmsSx] [-L <符号连接>][-X <文件>][--block-size][--exclude=<目录或文件>] [--max-de ...
- 创建Flask实例对象时的参数和app.run()中的参数
app=Flask(name,static_folder=“static”,static_url_path="/aaa",template_folder=“templates”) ...
- PL2303 USB转串口 com
PL2303 USB转串口 com PL-2303 XA/HXA chip http://www.prolific.com.tw/US/ShowProduct.aspx?p_id=225&pc ...
- K8s之Etcd
Etcd是一个开源的.高可用的.分布式的键值对数据存储系统,提供共享配置.服务的注册和发现.etcd与zookeeper相比算是轻量级系统,两者的一致性协议也一样,etcd的raft比zookeepe ...
- mongodb-MYSQL
#encoding:utf8 import pymongoimport MySQLdbimport randomdef GetMongoData(): MyQuery = Mongo_Tab.find ...
- Failed to resolve:com.android.support:appcompat-v7:报错处理
既然是版本问题,那就的先去了解自己的电脑安装的SDK工具版本,点开SDK Manager图标,然后选中Updates就可以看到了 这里我的 sdk 工具版本就是26.1.1了 报错是因为自己的andr ...
- 36. Valid Sudoku 判断九九有效的数独
[抄题]: Determine if a 9x9 Sudoku board is valid. Only the filled cells need to be validated according ...
- LAB2
任务1: 效果:HelloWorld 好像完全按视频做就行了 学会了:把glassfish改好了,能跑 没学会:视频里的解说不懂在干嘛,得再看看 任务2 效果:intersetingpicture要求 ...