.分页
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. MySQL优化之——集群搭建步骤具体解释

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/46833179 1 概述 MySQL Cluster 是MySQL 适合于分布式计算 ...

  2. unity3d进程通信利用WM_COPYDATE和HOOK

    hello,近期用unity做了进程通信,应该是和c++的PC端实现通信,才開始一头雾水,后来实现了才知道好繁杂......先感谢对我提供帮助的百度,谷歌以及游戏圈的大大们. 在进程通信中非常多方法, ...

  3. Hadoop解析--MapReduce

    从本篇博客開始咱们一起来具体了解Hadoop的每一个部分.我们在上篇博客中介绍了HDFS,MapReduce,MapReduce为了更有效率事实上是建立在HDFS之上的.有了分布式的文件系统,我们就能 ...

  4. (插播)关于使用jenkins + unity +Xcode 来进行自己主动打包的处理。

    近期了解了下jenkins流程化服务的东西,个人感觉jenkins是一个非常方便的工具.主要是方便.设置好流程性得命令.仅仅需确定下就能够达到自己主动化. 减轻了错误得发生和简化了带来的复杂得步骤.今 ...

  5. Xshell dns tunnel攻击

    该域名还会向多个超长域名做渗出,且域名采用了 DGA 生成算法,通过 DNS 解析时渗出数据. 部分生成域名如下: sajajlyoogrmkjlkmosbxowcrmwlvajdkbtbjoylyp ...

  6. DotNetCore.1.0.1-VS2015Tools.Preview2.0.2 安装错误分析及解决办法(so far)

    折腾了这么多天总算弄完了,真恶心.为了让其他童靴避免掉进我遇到的坑里,我决定把最近遇到问题及其解决办法总结一下,希望对大家有帮助. 1.对于2016年7月底以前安装VS用户来说,可能不会那么迫切安装这 ...

  7. HDU 1754 I Hate It【线段树 单点更新】

    题意:给出n个数,每次操作修改它的第s个数,询问给定区间的数的最大值 把前面两道题结合起来就可以了 自己还是敲不出来------------- #include<iostream> #in ...

  8. SP1487 PT07J - Query on a tree III 主席树+dfs序

    Code: #include<iostream> #include<cstdio> #include<algorithm> #include<string&g ...

  9. [arc076f]Exhausted? - 贪心

    题意: 给你m个椅子可以坐人,初始坐标为正整数1~m,有n个人,每个人希望坐的位置$\leq L_i$或者$\geq R_i$,可以添加若干个椅子在任意的实数位置,求最少要添加多少椅子使得所有人都有位 ...

  10. springboot ajax返回html

    因为拦截器 或者是 shiro  拦截登陆接口