9.分页操作

  • 分页,看第n页,每页显示n条数据
  • 分页,在n个位置,向后查看n条数据.
  • 加密分页,上一页和下一页
1.基于PageNumberPagination分页

1.路由:

url(r'^(?P<version>[v1|v2]+)/splitpage/$', views.SplitpageView.as_view(),),

2.视图函数

from rest_framework.pagination import PageNumberPagination
from rest_framework.response import Response
#分页需要导入类
class SplitpageView(APIView):
def get(self,request,*args,**kwargs):
#获取所有数据
roles = models.Role.objects.all()
#创建分页对象
pg = PageNumberPagination()
#在数据库中获取分页的数据
pager_roles = pg.paginate_queryset(queryset=roles,request=request,view=self)
print(pager_roles)
#对数据进行序列化
ser = PagerSerialiser(instance=pager_roles,many=True)
return Response(ser.data)
#settings.py配置
REST_FRAMEWORK = {
"PAGE_SIZE":2,
}
  • 返回效果:

  • 自定义分页:
class MyPageNumberPagination(PageNumberPagination):
#一页显示数量
page_size = 2
#设置
page_size_query_param = "size"
#每页最大数量
max_page_size = 5
#url页数变量设置:
page_query_param = "page" class SplitpageView(APIView):
def get(self,request,*args,**kwargs):
#获取所有数据
roles = models.Role.objects.all()
#创建分页对象
pg = PageNumberPagination()
#在数据库中获取分页的数据
pager_roles = pg.paginate_queryset(queryset=roles,request=request,view=self)
print(pager_roles)
#对数据进行序列化
ser = PagerSerialiser(instance=pager_roles,many=True) return Response(ser.data)
  • 显示效果:

  • 显示上一页与下一页,url

    #上面函数基础上:
    res = pg.get_paginated_response(ser.data)
    return ret

2.基于LimitOffsetPagination实现分页
class MyPageNumberPagination2(LimitOffsetPagination):
default_limit = 2
limit_query_param = "limit"
offset_query_param = "offset"
max_limit = 5 class SplitpageView(APIView):
def get(self,request,*args,**kwargs):
#获取所有数据
roles = models.Role.objects.all()
#创建分页对象
pg = MyPageNumberPagination2()
#在数据库中获取分页的数据
pager_roles = pg.paginate_queryset(queryset=roles,request=request,view=self)
print(pager_roles)
#对数据进行序列化
ser = PagerSerialiser(instance=pager_roles,many=True)
return Response(ser.data)
  • 显示结果

3.基于CursorPagination 分页(加密)
from rest_framework.pagination import CursorPagination
class MyPageNumberPagination3(CursorPagination):
#
cursor_query_param = "cursor"
page_size = 2
ordering = 'id'
page_size_query_param = None
max_page_size = None class SplitpageView(APIView):
def get(self,request,*args,**kwargs):
#获取所有数据
roles = models.Role.objects.all()
#创建分页对象
pg = MyPageNumberPagination3()
#在数据库中获取分页的数据
pager_roles = pg.paginate_queryset(queryset=roles,request=request,view=self)
print(pager_roles)
#对数据进行序列化
ser = PagerSerialiser(instance=pager_roles,many=True)
return pg.get_paginated_response(ser.data)

4.总结:
#如果数据量大,如何做分页.
数据库性能相关?

Django:RestFramework之-------分页的更多相关文章

  1. django: rest-framework的 分页和过滤

    django: rest-framework的 分页和过滤 2018年06月28日 10:09:01 weixin_42359464 阅读数:136 标签: flaskrestframeworkdja ...

  2. django restframework

    一.django restframework 请求流程源码剖析 上面的认证一个流程是rest_framework的关于APIauth的认证流程,,这个流程试用权限.频率.版本.认证.这个四个组件都是通 ...

  3. django restframework 的日常使用

    本文讨论 django restframework 的日常使用,满足常用 api 编写的需求,比如 List, Detail, Update, Put, Patch 等等.探讨 django rest ...

  4. Django RestFramework (DRF)

    准备: 下载 pip install djangorestframework 一 APIView源码解析 1 预备知识 CBV(class based view)FBV(function based ...

  5. django restframework serializer 增加自定义字段

    在使用django restframework serializer 序列化在django中定义的model时,有时候我们需要额外在serializer中增加一些model中没有的字段.有两种方法实现 ...

  6. django之快速分页

    本文介绍djanog两种分页,第一是普通分页,第二是使用haystack全文检索的分页. 1.django自带分页功能,这个功能非常好用.基本知识点:Django提供了数据分页的类,这些类被定义在dj ...

  7. Django内置分页

    一.django内置分页 from django.shortcuts import render from django.core.paginator import Paginator, EmptyP ...

  8. django restframework jwt

    既然要来学习jwt(json web token),那么我们肯定是先要了解jwt的优势以及应用场景--跨域认证. $ pip install djangorestframework-jwt 传统coo ...

  9. Django中的分页,cookies与session

    cookie Cookie的由来 大家都知道HTTP协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响,也不 ...

随机推荐

  1. USACO Buying Feed, II

    洛谷 P2616 [USACO10JAN]购买饲料II Buying Feed, II 洛谷传送门 JDOJ 2671: USACO 2010 Jan Silver 2.Buying Feed, II ...

  2. 【java】String与Date转换

    String转Date            String date="";            SimpleDateFormat format=new SimpleDateFo ...

  3. v2.3.0

    v2.3.1 大版本2,小版本3,fixbug 1

  4. 异常EXCEPTION_HIJACK(0xe0434f4e)

    简介 EXCEPTION_HIJACK,值为0xe0434f4e.意思是CLR线程劫持异常.异常劫持是CLR在挂起线程进行垃圾收集的过程中抛出的.它的抛出是为了帮助停止后恢复执行.它定义在..\clr ...

  5. 洛谷P1531 I Hate It题解

    题目背景 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少.这让很多学生很反感. 题目描述 不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的 ...

  6. 1-6docker数据共享与持久化

    1.在 Docker 内部以及容器之间管理数据,在容器中管理数据主要有两种⽅式: 数据卷(Data Volumes) 挂载主机⽬录 (Bind mounts) 2.数据卷 数据卷 是⼀个可供⼀个或多个 ...

  7. 【Activiti学习之七】BPMN子流程、顺序流、流程关口

    环境 JDK 1.8 MySQL 5.6 Tomcat 7 Eclipse-Luna activiti 6.0 一.子流程 1.嵌入子流程2.调用子流程3.事件子流程4.事务子流程 二.顺序流1.条件 ...

  8. Maven 教程(12)— Maven生命周期和插件

    原文地址:https://blog.csdn.net/liupeifeng3514/article/details/79549695 除了坐标.依赖以及仓库之外,Maven的另外两个核心概念是生命周期 ...

  9. eclipse中正确创建Django项目

    本教程只说明eclipse中django项目的创建,不涉及django相关开发内容: 1."File" -> "New" -> "Othe ...

  10. nginx返回file not found原因

    nginx返回file not found原因1 确实没有这个文件2 没有权限访问这个网站目录!!!