drf分页器

1.第一种分页:
类似于django中的分页
2.第二种分页:
偏移分页
3.第三种分页:
加密分页(查询速度快)
无法跳跃

基本参数

from rest_framework.pagination import PageNumberPagination,LimitOffsetPagination,CursorPagination

page_size #每页显示的数量

page_query_param = 'page'  #/?page=2 查询的key

#指定当前页显示多少条
page_size_query_param#/?page=2&size=5 取第2页,显示5条 #当前页显示最多条数
max_page_size

第一种分页

from rest_framework.pagination import PageNumberPagination,LimitOffsetPagination,CursorPagination

#实例化产生一个分页对象
page = PageNumberPagination() #第一个参数:要分页的数据,第二个参数,request,第三个参数,当前视图对象
page_list = page.paginate_queryset(book_list,request,self)#self为视图 #再序列化的时候,用分页之后的数据
ser = Myserializer(instance=page_list,many=True)
paginate_queryset

第二种分页,偏移分页

#默认每页显示多少
default_limit = 2 #标杆 /?offset=2&limit=3 以2位基础,显示3条 offset_query_param='offset' limit_query_param = 'limit' #每页显示的最大条数
max_limit = 5 from rest_framework.pagination import LimitOffsetPagination #实例化产生一个分页对象
page = LimitOffsetPagination() #第一个参数:要分页的数据,第二个参数,request,第三个参数,当前视图对象
page_list = page.paginate_queryset(book_list,request,self)#self为视图 #再序列化的时候,用分页之后的数据
ser = Myserializer(instance=page_list,many=True)
paginate_queryset

第三种分页(加密分页)

#按nid排序
page.ordering = 'nid'
#查询的key值
cursor_query_param = 'cursor'
#每页显示多少条
page_size = 2

使用

1.生成对象(可以修改对象的属性)
2.ret = 对象.paginate_queryset()
3.丢到序列化类中,完成序列化

修改默认参数的两种方法

1.自定义分页类,继承PageNumberPagination
2.产生page = PageNumberPagination()对象后
page.page_size=5
page.page_query_param = 'size'

练习

from rest_framework.pagination import PageNumberPagination,LimitOffsetPagination,CursorPagination
from rest_framework.views import APIView
from django.http import JsonResponse
class Infos(APIView):
def get(self,request,*args,**kwargs):
res_page = int(request.query_params.get('page',0))
conn = get_redis_connection()
obj_li = []
for key,value in conn.hscan_iter('dic1',count=1000):
k =key.decode('utf-8')
v = value.decode('utf-8')
obj_li.append({k:v})
page = PageNumberPagination()
page.page_size = 120
max_page =int(len(obj_li)/page.page_size)
if res_page > max_page:
return HttpResponse('超过最大页数')
page_list = page.paginate_queryset(obj_li,request,self)
return JsonResponse(page_list,safe=False)

drf分页器的更多相关文章

  1. $Django importlib与dir知识,手写配置文件, 配置查找顺序 drf分页器&drf版本控制

    1  importlib与dir知识 # importlib简介动态导入字符串模块 # 常规导入 from ss.aa import b from ss import a print(b,type(b ...

  2. 一.rest-framework之版本控制 二、Django缓存 三、跨域问题 四、drf分页器 五、响应器 六、url控制器

    一.rest-framework之版本控制 1.作用 用于版本的控制 2.内置的版本控制 from rest_framework.versioning import QueryParameterVer ...

  3. Django(68)drf分页器的使用

    前言 当后台返回的数据过多时,我们就要配置分页器,比如一页最多只能展示10条等等,drf中默认配置了3个分页面 PageNumberPagination:基础分页器,性能略差 LimitOffsetP ...

  4. drf过滤器、分页器、筛选器的应用

    一.drf 提供的过滤器(ordering) views.py from rest_framework.generics import ListAPIView from . import models ...

  5. Django框架深入了解_04(DRF之url控制、解析器、响应器、版本控制、分页)

    一.url控制 基本路由写法:最常用 from django.conf.urls import url from django.contrib import admin from app01 impo ...

  6. drf框架之分页器的用法

    1. 分页器分为:简单分页器与偏移分页器和加密分页器 2.实现一个简单的分页器的用法: # 简单分页 # 第一步,导入分页类 # from rest_framework.pagination impo ...

  7. drf 认证、权限、限流、过滤、排序、分页器

    认证Authentication 准备工作:(需要结合权限用) 1. 需要使用到登陆功能,所以我们使用django内置admin站点并创建一个管理员. python manage.py creates ...

  8. DRF(5) - 频率组件、url注册器、响应器、分页器

    一.频率组件 1.使用DRF简单频率控制实现对用户进行访问频率控制 1)导入模块,定义频率类并继承SimpleRateThrottle # 导入模块 from rest_framework.throt ...

  9. DRF之注册器响应器分页器

    概要 url注册器 响应器 分页器 url注册器 通过DRF的视图组件,数据接口逻辑被我们优化到最剩下一个类,接下来,我们使用DRF的url控制器来帮助我们自动生成url,使用步骤如下: 第一步:导入 ...

随机推荐

  1. JavaSE---ThreadLocal

    1.Java为线程安全提供了工具类,如ThreadLocal等: 2.ThreadLocal类是一个   线程局部变量  ,通过将  ”数据“  放在ThreadLocal中,即可在每条线程中创建一个 ...

  2. SpringBoot+Vue前后端分离,使用SpringSecurity完美处理权限问题(一)

    当前后端分离时,权限问题的处理也和我们传统的处理方式有一点差异. 笔者前几天刚好在负责一个项目的权限管理模块,现在权限管理模块已经做完了,我想通过5-6篇文章,来介绍一下项目中遇到的问题以及我的解决方 ...

  3. express转发请求

    express var express = require('express'); var axios = require('axios'); var qs = require('qs'); var ...

  4. 面向切面编程 (AOP )的理解

    AOP的全称: Aspact  Oriented  Programming AOP的目标(作用):让我们可以“专心做事”  日志记录,事务处理,异常捕获,缓存操作. AOP原理 将复杂的需求分解出不同 ...

  5. 开源组件 Mark

    http://www.cnblogs.com/asxinyu/category/661170.html

  6. VS2013使用EF6通过ADO.NET 连接mySql成功步骤

    VS2013使用EF6通过ADO.NET 连接mySql成功步骤 1.安装mysql-for-visualstudio-1.2.6(我用的目前最新版,这个一般安装VS2013就已经有了,没有的话下载一 ...

  7. vue-quill-editor上传内容由于图片是base64的导致字符太长的问题解决

    vue-quill-editor是个较为轻量级富文本框,相较于ueditor,开发更编辑,更加直观,如果大家伙在需求允许的情况下,还是会比较建议使用vue-quill-editor vue-quill ...

  8. 'gets' undeclared here (not in a function)

    原文:http://www.cnblogs.com/hjj801006/p/3988220.html 1.在命令行输入:find -name stdio.in.h.查到有两个文件中含有stdio.in ...

  9. 初识ProgressBar

    Android FormWidget之一 实现起来很简单,大体有两种style. 怎么自定义ProgressBar? 有两种方法,一种是运用android:progressDrawable=" ...

  10. Docker学习资料汇总

    一.Docker问答录(100问)  链接:https://blog.lab99.org/post/docker-2016-07-14-faq.html 二.Windows 10 如何安装Docker ...