rest framework-分页-长期维护
############### 分页组件 ###############
# 分页组件
#
# django也有分页,rest framework也有分页,但是没有页面这个概念了,
# 这个分页是返回给前端数据太多的时候,需要分页返回,
# http://127.0.0.1:8000/books/?page=1,
# 我们需要把继承这个分页类,然后重写一些方法,
# class MyPageNumberPagination(PageNumberPagination):
# page_size =2
# page_query_param = "page"
# page_size_query_param = "size"
# #####################################
# http://127.0.0.1:8000/books/?page=1&size=1
# 默认显示两个,但是可以自己指定显示几个,
# #########################################
# http://127.0.0.1:8000/books/?limit=3
# http://127.0.0.1:8000/books/?limit=3&offset=1,这是偏移,
# #############################################
# pagination_class = MyPageNumberPagination
# 这视图里面加上这一句,就会去找我们定义的视图类了,
# 所以分页器的使用,就是定义一个分页的类,然后加一句,就可以了,
############### 第一种分页器:PageNumberPagination ###############
按页码数分页,第n页,每页显示m条数据
例如:http://127.0.0.1:8000/api/article/?page=2&size=1
分页器:
class MyPageNumber(PageNumberPagination):
page_size = 2 # 每页显示多少条
page_size_query_param = 'size' # URL中每页显示条数的参数
page_query_param = 'page' # URL中页码的参数
max_page_size = None # 最大页码数限制
视图:
class ArticleList(APIView):
def get(self, request, *args, **kwargs):
res = {"code": 0}
article_list = models.Article.objects.all().order_by("id")
# 分页
page_obj = MyPageNumber()
page_article = page_obj.paginate_queryset(queryset=article_list, request=request, view=self)
ser_obj = ArticleSerializer(page_article, many=True)
res["data"] = ser_obj.data
return Response(res)
返回带页码链接的响应:
class ArticleList(APIView):
def get(self, request, *args, **kwargs):
res = {"code": 0}
article_list = models.Article.objects.all().order_by("id")
# 分页
page_obj = MyPageNumber()
page_article = page_obj.paginate_queryset(queryset=article_list, request=request, view=self)
ser_obj = ArticleSerializer(page_article, many=True)
res["data"] = ser_obj.data
return page_obj.get_paginated_response(res)
############### 第二种分页器:LimitOffsetPagination ###############
分页,在n位置,向后查看m条数据
例如:http://127.0.0.1:8000/api/article/?offset=2&limit=2
分页器:
# offset分页
class MyLimitOffset(LimitOffsetPagination):
default_limit = 1
limit_query_param = 'limit'
offset_query_param = 'offset'
max_limit = 999
视图:
class ArticleList(APIView):
def get(self, request, *args, **kwargs):
res = {"code": 0}
article_list = models.Article.objects.all().order_by("id")
# 分页
page_obj = MyLimitOffset()
page_article = page_obj.paginate_queryset(queryset=article_list, request=request, view=self)
ser_obj = ArticleSerializer(page_article, many=True)
res["data"] = ser_obj.data
return page_obj.get_paginated_response(res)
############### 第三种分页器:CursorPagination ###############
加密分页,把上一页和下一页的id值记住
分页器:
# 加密分页
class MyCursorPagination(CursorPagination):
cursor_query_param = 'cursor'
page_size = 1
ordering = '-id' # 重写要排序的字段
视图:
class ArticleList(APIView):
def get(self, request, *args, **kwargs):
res = {"code": 0}
article_list = models.Article.objects.all().order_by("id")
# 分页
page_obj = MyCursorPagination()
page_article = page_obj.paginate_queryset(queryset=article_list, request=request, view=self)
ser_obj = ArticleSerializer(page_article, many=True)
res["data"] = ser_obj.data
# return Response(res)
return page_obj.get_paginated_response(res)
############### 分页组件 ###############
rest framework-分页-长期维护的更多相关文章
- django框架进阶-分页-长期维护
################## 分页 ####################### 分页, django有自己内置的分页,但是功能不是很强大,所以自己写一个分页, web页面数据非常 ...
- Entity Framework分页扩展
Entity Framework分页在我初入门时总是困扰这我,无论是SQL分页还是Entity Framework的分页,总是显得那么麻烦,因此对于Entity Framework单独封装了分页. 一 ...
- django: django rest framework 分页
django: django rest framework 分页 2018年06月22日 13:41:43 linux_player_c 阅读数:665更多 所属专栏: django 实战 版权声 ...
- rest framework 分页,版本
分页 分页器的引入 from rest_framework.pagination import PageNumberPagination, LimitOffsetPagination, CursorP ...
- 05 Django REST Framework 分页
01-分页模式 rest framework中提供了三种分页模式: from rest_framework.pagination import PageNumberPagination, LimitO ...
- Django REST Framework - 分页 - 渲染器 - 解析器
为什么要使用分页? 我们数据表中可能会有成千上万条数据,当我们访问某张表的所有数据时,我们不太可能需要一次把所有的数据都展示出来,因为数据量很大,对服务端的内存压力比较大还有就是网络传输过程中耗时也会 ...
- rest framework-restful介绍-长期维护
############### django框架-rest framework ############### # django rest framework 框架 # 为什么学习这个res ...
- python后端面试第七部分:项目部分--长期维护
################## 项目部分 ####################### 1,你怎么测试自己的代码的?自测 2,开发使用windows还是Linux,虚拟环境的 ...
- Django Rest Framework(分页、视图、路由、渲染器)
一.分页 试问如果当数据量特别大的时候,你是怎么解决分页的? 方式a.记录当前访问页数的数据id 方式b.最多显示120页等 方式c.只显示上一页,下一页,不让选择页码,对页码进行加密 1.基于lim ...
随机推荐
- Mybatis实现增删改查(二)
1. 准备 请先完成Mybatis基本配置(一)的基本内容 2. 查询多条商品信息 1)在com.mybatis.dao.PartDao中增加接口函数 public List<PartInfo& ...
- Java多线程之并发包,并发队列
目录 1 并发包 1.1同步容器类 1.1.1Vector与ArrayList区别 1.1.2HasTable与HasMap 1.1.3 synchronizedMap 1.1.4 Concurren ...
- HTML5新标签使用及CSS选择器(伪类)
这些标签能够让搜索引擎更直接的解析页面内容. <header></header>语义:文档或者页面的头部 <nav></nav>语义:导航这两者不是组合 ...
- Map 查找表操作
package seday13; import java.util.HashMap; import java.util.Map; /** * @author xingsir * java.util.M ...
- retrofit 上传文件 跟参数
@Multipart @POST("postFied") Call<Void> postFied(@PartMap Map<String,String> m ...
- Springmvc接收数组参数
Springmvc接收数组参数,必须添加@RequestParam注解 注解格式@RequestParam(value="前端参数名[]") 示例: controller端的代码 ...
- 腾讯一shell试题.
腾讯一shell试题. 假设qq.tel文件内容: 12334:13510014336 12345:12334555666 12334:12343453453 12099:13598989899 12 ...
- Python笔记_第一篇_面向过程_第一部分_3.进制、位运算、编码
通过对内存这一个部分的讲解,对编程会有一个相对深入的认识.数据结构是整个内存的一个重要内容,那么关于数据结构这方面的问题还需要对进制.位运算.编码这三个方面再进行阐述一下.前面说将的数据结构是从逻辑上 ...
- modbus 指令16 $10 的格式
{ //写多个请求 01(从设备)10(功能码) 00 77(起始地址) 00 01(寄存器数) 02(字节数) 05 55(写的数据) 6F B8(CRC) //写多个返回 01(从设备) 10(功 ...
- 即时函数(Immediate Functions)
1.即时函数的声明方法 即时函数(Immediate Functions)是一种特殊的JavaScript语法,可以使函数在定义后立即执行: (function () { alert('wat ...