.分页
a. 分页 看第n页 每页显示n条数据:
b. 分页 在某个位置 向后查看多少条数据
c. 加密分页 上一页和下一页 本质:查看 记住页码id的最大值和最小值 通过其来准确扫描
过去的话 会从id 1到n扫描 第一种分页
api下的utils.serializers.pager.py
from rest_framework import serializers
from api import models
class PagerSerialiser(serializers.ModelSerializer):
class Meta:
model = models.Role
fields = "__all__" url里写
from django.contrib import admin
from api import views
from django.conf.urls import url
urlpatterns = [
url(r'^pager1/', views.Pager1View.as_view())
] 视图里写
from rest_framework.response import Response
from api.utils.serializers.pager import PagerSerialiser
from rest_framework.pagination import PageNumberPagination class MyPageNumberPagination(PageNumberPagination):
page_size= #默认两个
page_size_query_param = 'size' #传一个size参数 一页显示多少 http://127.0.0.1:8000/pager1/?page=1&size=3
max_page_size = #一页显示最大5个 page_query_param = 'page' #页码 class Pager1View(APIView): def get(self,request, *args,**kwargs):
#获取所有数据
roles = models.Role.objects.all()
#创建分页对象
pg = MyPageNumberPagination()
#在数据库中获取分页数据
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) #返回上一页或者下一页 第二种分页 索引值最大最小值分页
视图函数
from django.shortcuts import render,HttpResponse
import json
# Create your views here.
from rest_framework.views import APIView
from rest_framework import serializers
from api import models
class UserInfoserializer(serializers.ModelSerializer): group = serializers.HyperlinkedIdentityField(view_name='gp',lookup_field='group_id',lookup_url_kwarg='pk')
class Meta:
model = models.UserInfo
# fields = '__all__'
fields = ['group']
depth = #0到3 4层 class UserInfoView(APIView):
def get(self,request, *arg, **kwargs):
users = models.UserInfo.objects.all()
ser = UserInfoserializer(instance=users, many=True,context={'request': request}) #必须添加 context = {'request':request} ret = json.dumps(ser.data, ensure_ascii = False)
return HttpResponse(ret) class GroupSerializer(serializers.ModelSerializer):
class Meta:
model = models.UserGroup
fields = '__all__' class GroupView(APIView): def get(self,request,*args,**kwargs):
pk = kwargs.get('pk')
obj = models.UserGroup.objects.filter(pk=pk).first() ser = GroupSerializer(instance=obj, many=False)
ret = json.dumps(ser.data,ensure_ascii=False) return HttpResponse(ret) from rest_framework.response import Response
from api.utils.serializers.pager import PagerSerialiser
from rest_framework.pagination import PageNumberPagination,LimitOffsetPagination class MyPageNumberPagination(PageNumberPagination):
page_size= #默认两个
page_size_query_param = 'size' #传一个size参数 一页显示多少 http://127.0.0.1:8000/pager1/?page=1&size=3
max_page_size = #一页显示最大5个 page_query_param = 'page' #页码 class MyPagenumber2Pagination(LimitOffsetPagination):
default_limit =
limit_query_param = 'limit' #每页多少条数据
offset_query_param = 'offset' #第几个索引开始
max_limit = class Pager1View(APIView): def get(self,request, *args,**kwargs):
#获取所有数据
roles = models.Role.objects.all()
#创建分页对象
pg = MyPagenumber2Pagination()
#在数据库中获取分页数据
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) #返回上一页或者下一页 return Response(ser.data) 分页第三种:cursion from rest_framework.response import Response
from api.utils.serializers.pager import PagerSerialiser
from rest_framework.pagination import PageNumberPagination,LimitOffsetPagination,CursorPagination class MyPageNumberPagination(PageNumberPagination):
page_size= #默认两个
page_size_query_param = 'size' #传一个size参数 一页显示多少 http://127.0.0.1:8000/pager1/?page=1&size=3
max_page_size = #一页显示最大5个 page_query_param = 'page' #页码 class MyPagenumber2Pagination(LimitOffsetPagination):
default_limit =
limit_query_param = 'limit' #每页多少条数据
offset_query_param = 'offset' #第几个索引开始
max_limit = class MyPagenumber3Pagination(CursorPagination):
cursor_query_param = 'cursor'
page_size =
ordering = 'id'
page_size_query_param = None
max_page_size = None class Pager1View(APIView): def get(self,request, *args,**kwargs):
#获取所有数据
roles = models.Role.objects.all()
#创建分页对象
pg = MyPagenumber3Pagination()
#在数据库中获取分页数据
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) #返回上一页或者下一页

rest_framework 分页三种的更多相关文章

  1. springboot+mybatis实现数据分页(三种方式)

    项目准备 1.创建用户表 2.使用spring初始化向导快速创建项目,勾选mybatis,web,jdbc,driver 添加lombok插件 <?xml version="1.0&q ...

  2. 数据分页 THINKPHP3.2 分页 三种分页方法

    数据分页 复制本页链接 opensns 通常在数据查询后都会对数据集进行分页操作,ThinkPHP也提供了分页类来对数据分页提供支持. 下面是数据分页的两种示例. 第一种:利用Page类和limit方 ...

  3. Sql三种分页方法

    --分页三种方法--第一种 ROW_NUMBER() OVER( ORDER BY OrgID) AS indexs 大于pagesize*pageindex,少于等于pagesize*(pagein ...

  4. DjangoRestFramework框架三种分页功能的实现 - 在DjangoStarter项目模板中封装

    前言 继续Django后端开发系列文章.刚好遇到一个分页的需求,就记录一下. Django作为一个"全家桶"型的框架,本身啥都有,分页组件也是有的,但默认的分页组件没有对API开发 ...

  5. 【SQL】Oracle分页查询的三种方法

    [SQL]Oracle分页查询的三种方法 采用伪列 rownum 查询前10条记录 ? 1 2 3 4 5 6 7 8 9 10 11 [sql] select * from t_user t whe ...

  6. Asp.Net中的三种分页方式

    Asp.Net中的三种分页方式 通常分页有3种方法,分别是asp.net自带的数据显示空间如GridView等自带的分页,第三方分页控件如aspnetpager,存储过程分页等. 第一种:使用Grid ...

  7. MySQL、SQLServer2000(及SQLServer2005)和ORCALE三种数据库实现分页查询的方法

    在这里主要讲解一下MySQL.SQLServer2000(及SQLServer2005)和ORCALE三种数据库实现分页查询的方法. 可能会有人说这些网上都有,但我的主要目的是把这些知识通过我实际的应 ...

  8. sqlserver三种分页方式性能比较

    Liwu_Items表,CreateTime列建立聚集索引 第一种,sqlserver2005特有的分页语法 declare @page intdeclare @pagesize intset @pa ...

  9. T-sql中的三种分页查询

    USE [APS_Future_FT] GO /****** Object: StoredProcedure [dbo].[A_PagingAndSorting] Script Date: 2013/ ...

随机推荐

  1. 树莓派学习笔记—— 源码方式安装opencv

    0.前言     本文介绍怎样在树莓派中通过编译源码的方式安装opencv,并通过一个简单的样例说明怎样使用opencv.     很多其它内容请參考--[树莓派学习笔记--索引博文] 1.下载若干依 ...

  2. 在IDEA中代码自动提示第一个字母大小写必须匹配的解决

    在IDEA中代码自动提示第一个字母大小写必须匹配的解决 学习了:http://blog.csdn.net/babys/article/details/41775715 setting>Edito ...

  3. hdoj--5606--tree(并查集)

    tree Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submi ...

  4. 文档相关命令-cat命令查看一个文件

    用于查看一个文件的内容并将其显示在屏幕上 cat 后直接加上文件名 -n  表示显示行号 cat -n dirb/filee -A 显示所有内容包括特殊字符 cat -A dirb/filee

  5. 今天犯的一个错误,导致method GET must not have a request body

    事件经过: 1.在本地机器运行完全正常的程序,手动人工发包到测试环境上,后台日志频频报method GET must not have a request body. 2.使用postman发送pos ...

  6. 14:Challenge 7(map大法好)

    总时间限制:  10000ms 单个测试点时间限制:  1000ms 内存限制:  262144kB 描述 给一个长为N的数列,有M次操作,每次操作是以下两种之一: (1)修改数列中的一个数 (2)求 ...

  7. 在sql server数据库的一个表中如何查询共有多少字段

    select a.* from sys.columns a,sys.tables bwhere a.object_id = b.object_id and b.name = '要查的表名'

  8. POJ 1182 食物链 【并查集】

    解题思路:首先是没有思路的----然后看了几篇解题报告 http://blog.csdn.net/ditian1027/article/details/20804911 http://poj.org/ ...

  9. nginx 子进程 woker process 启动失败的问题

    问题: 重启nginx服务,worker process 子进程启动失败,启动的都是master进程: 负载急速升高(平常都是4-5),占用CPU资源多的前十进程都是nginx : nginx 错误日 ...

  10. vue 连接后台

    在 index.js 中可以配置后台的地址:代理的方式: 这个文件在 config 中 proxyTable: { // 连接后台 '/api':{ target:"http://new.w ...