分页
a.分页,看第N页,每页显示N条数据
方式一:使用PageNumberPagination创建分页对象,配合settings全局配置

views设置

from rest_framework.pagination import PageNumberPagination

class PagesView(APIView):
def get(self,request,*args,**kwargs):
#获取所有数据
m = models.UserInfo.objects.all()
#创建分页对象
pg = PageNumberPagination()
#在数据库中获取分页的数据
pa_info = pg.paginate_queryset(queryset=m,request=request,view=self)
#对数据进行序列化,此处参照序列化部分
ser = pages.PagesSerializer(instance=pa_info,many=True)
#自带的返回格式,效果更好
  return pg.get_paginated_response(ser.data)
#return Response(ser.data)

settings设置

REST_FRAMEWORK = {
'PAGE_SIZE':2,
}

返回结果

"count": 10,
"next": "http://127.0.0.1:8000/api/v1/pages/?page=3&size=2",
"previous": "http://127.0.0.1:8000/api/v1/pages/?size=2",

方式二:不使用全局配置,继承PageNumberPagination做自定制类,其余同上

自定制类:

from rest_framework.pagination import PageNumberPagination
class MyPageNumberPagination(PageNumberPagination):
page_size = 3 #设置每页显示个数
page_size_query_param = 'size' #设置前段传参字段
max_page_size = 5 #设置最大显示个数
page_query_param = 'page' #前段页面传参字段

urls:

http://127.0.0.1:8000/api/v1/pages/?page=2&size=2

views:

class PagesView(APIView):
def get(self,request,*args,**kwargs):
#获取所有数据
m = models.UserInfo.objects.all()
#创建分页对象,与方式一不同
pg = MyPageNumberPagination()
#在数据库中获取分页的数据
pa_info = pg.paginate_queryset(queryset=m,request=request,view=self)
#对数据进行序列化
ser = pages.PagesSerializer(instance=pa_info,many=True)
return pg.get_paginated_response(ser.data)

b.分页,看N个位置,向后查看N条数据,方式同a-2,自定制类继承LimitOffsetPagination类

自定制类:

from rest_framework.pagination import LimitOffsetPagination
class MyPageNumberPaginationNew(LimitOffsetPagination):
default_limit = 4 #设置每页显示个数
limit_query_param = 'limit' #设置前端显示数量的传参字段
offset_query_param = 'offset' #设置前端页面开始数字传参字段
max_limit = 5

urls:

http://127.0.0.1:8000/api/v1/pages/?limit=3&offset=2

views:

class PagesView(APIView):
def get(self,request,*args,**kwargs):
#获取所有数据
m = models.UserInfo.objects.all()
#创建分页对象,实例化上面的类
pg = MyPageNumberPaginationNew()
#在数据库中获取分页的数据
pa_info = pg.paginate_queryset(queryset=m,request=request,view=self)
#对数据进行序列化
ser = pages.PagesSerializer(instance=pa_info,many=True)
return pg.get_paginated_response(ser.data)

c.加密分页,上一页和下一页,方式同上,自定制类继承CursorPagination类

自定制类:

from rest_framework.pagination import CursorPagination

class MyPageNumberPaginationCursor(CursorPagination):
cursor_query_param = 'cursor'
page_size = 5
page_size_query_param = 'size'
max_page_size = 5
ordering = 'id' #数据排序方式

MyPageNumberPaginationCursor

urls:

http://127.0.0.1:8000/api/v1/pages/?cursor=cD0y&size=2

views:

class PagesView(APIView):
def get(self,request,*args,**kwargs):
#获取所有数据
m = models.UserInfo.objects.all()
#创建分页对象,同上,只修改实例类即可
pg = MyPageNumberPaginationCursor()
#在数据库中获取分页的数据
pa_info = pg.paginate_queryset(queryset=m,request=request,view=self)
#对数据进行序列化
ser = pages.PagesSerializer(instance=pa_info,many=True)
return pg.get_paginated_response(ser.data)

「Django」rest_framework学习系列-分页的更多相关文章

  1. 「Django」rest_framework学习系列-视图

    方式一 1.settings设置 INSTALLED_APPS = [ ... 'rest_framework', ] 2.views设置 from rest_framework.response i ...

  2. 「Django」rest_framework学习系列-API访问跨域问题

    #以中间件方式解决API数据访问跨域问题1.API下新建文件夹下写PY文件a.引入内置类继承: from django.middleware.common import MiddlewareMixin ...

  3. 「Django」rest_framework学习系列-路由

    自动生成4个url路由:from rest_framework import routersrouter = routers.DefaultRouter()router.register(r'wrx' ...

  4. 「Django」rest_framework学习系列-渲染器

    渲染器:作用于页面,JSONRenderer只是JSON格式,BrowsableAPIRenderer有页面,.AdminRenderer页面以admin形式呈现(需要在请求地址后缀添加?fromat ...

  5. 「Django」rest_framework学习系列-解析器

    满足两个要求,request.Post中才有值 1.请求头要求:请求头中的Content-Type为application/x-www-form-urlencoded 2.数据格式要求 name=x& ...

  6. 「Django」rest_framework学习系列-序列化

    序列化方式一 :在业务类里序列化数据库数据 class RolesView(APIView): def get(self,request,*args,**kwargs): roles = models ...

  7. 「Django」rest_framework学习系列-版本认证

    1.自己写: class UserView(APIView): versioning_class = ParamVersion def get(self,request,*args,**kwargs) ...

  8. 「Django」rest_framework学习系列-权限认证

    权限认证:1.项目下utils文件写permissions.py文件 from rest_framework.permissions import BasePermission class SVIPP ...

  9. 「Django」rest_framework学习系列-节流控制

    1.节流自定义类: import time from api import models VISIT_RECORD = {} class VisitThrottle(BaseThrottle): #设 ...

随机推荐

  1. python循环结构

    while循环 while 条件表达式: 语句块 while语句的条件表达式是循环条件,常用的是关系表达式或者逻辑表达式,语句块是循环执行的语句. n=1 p=1 num=int(input(&quo ...

  2. [linux] vim在源代码中自动添加作者信息(转载)

    原文出处: http://www.vimer.cn/2009/10/用vim在源代码中添加你的个人信息.html vim ~/.vimrc "进行版权声明的设置 "添加或更新头 m ...

  3. Beta冲刺贡献分数分配结果

    小组名称:Hello World! 项目名称:空天猎 组长:陈建宇 成员:刘成志.刘耀泽.刘淑霞.黄泽宇.方铭.贾男男 第三周贡献分分配结果 基础分 会议分 个人贡献分 最终分数 黄泽宇 9 0.5 ...

  4. Beta阶段第二次网络会议

    Beta阶段第二次网络会议 第一次会议问题解决情况 画面问题已经解决,游戏提示信息已加入完成 不同情况下背景已加入完成,但细节部分仍需要进行调整 科技树添加完成,权限修改完成,还存在部分细节调整 AI ...

  5. 20172332『Java程序设计』课程结对编程练习_四则运算第二周阶段总结

    20172313『Java程序设计』课程结对编程练习_四则运算第二周阶段总结 小组成员 20172326康皓越 20172313余坤澎 20172332于欣月 小组编程照片 设计思路 设计一个生成符号 ...

  6. MySort试验记录

    MySort试验记录 编写目标 结果代码 思路 将数组每一个项目的第三组数字抽出来并且排序成12345的顺序,并形成新数组k3. 把原数组的每一项与k3进行比较,每符合一项便输出一项,从而重新排序出新 ...

  7. 下载与安装APache Cordova

    最近老师留了写网页版或手机版程序,但先前没有好好听javaweb,而今年又没选Android移动应用开发.所以去图书馆借了一本书是关于HTML5+CSS3+jQueryMobile的. 这几天配置了打 ...

  8. asp.net如何实现负载均衡方案讨论

    请注意,本文内容分多次修改,如需阅读,请阅读完整,因为早期的观点是不太合理的,后面由于水平进步,已经做了修改! 我的目标是我一个人搭建一个负载均衡网站.不接受这是网络部,或者运维,或者系统部的事情,所 ...

  9. OSG学习:LOD、数据分页、动态调度

    LOD(level of detail):是指根据物体模型的结点在显示环境中所处的位置和重要度,决定物体渲染的资源分配,降低非重要物体的面数和细节度,从而获得高效率的渲染运算.在OSG的场景结点组织结 ...

  10. 3dContactPointAnnotationTool开发日志(二七)

      今天的主要工作是把选中物体以及复制删除物体和右边三个面板联系起来,就是通过鼠标框选住物体,右边面板的对应项的颜色也会改变,而且通过右边面板也能控制物体的选中状态,被选中的物体成cyan青色,并且包 ...