rest_framework 分页三种
.分页
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 分页三种的更多相关文章
- springboot+mybatis实现数据分页(三种方式)
项目准备 1.创建用户表 2.使用spring初始化向导快速创建项目,勾选mybatis,web,jdbc,driver 添加lombok插件 <?xml version="1.0&q ...
- 数据分页 THINKPHP3.2 分页 三种分页方法
数据分页 复制本页链接 opensns 通常在数据查询后都会对数据集进行分页操作,ThinkPHP也提供了分页类来对数据分页提供支持. 下面是数据分页的两种示例. 第一种:利用Page类和limit方 ...
- Sql三种分页方法
--分页三种方法--第一种 ROW_NUMBER() OVER( ORDER BY OrgID) AS indexs 大于pagesize*pageindex,少于等于pagesize*(pagein ...
- DjangoRestFramework框架三种分页功能的实现 - 在DjangoStarter项目模板中封装
前言 继续Django后端开发系列文章.刚好遇到一个分页的需求,就记录一下. Django作为一个"全家桶"型的框架,本身啥都有,分页组件也是有的,但默认的分页组件没有对API开发 ...
- 【SQL】Oracle分页查询的三种方法
[SQL]Oracle分页查询的三种方法 采用伪列 rownum 查询前10条记录 ? 1 2 3 4 5 6 7 8 9 10 11 [sql] select * from t_user t whe ...
- Asp.Net中的三种分页方式
Asp.Net中的三种分页方式 通常分页有3种方法,分别是asp.net自带的数据显示空间如GridView等自带的分页,第三方分页控件如aspnetpager,存储过程分页等. 第一种:使用Grid ...
- MySQL、SQLServer2000(及SQLServer2005)和ORCALE三种数据库实现分页查询的方法
在这里主要讲解一下MySQL.SQLServer2000(及SQLServer2005)和ORCALE三种数据库实现分页查询的方法. 可能会有人说这些网上都有,但我的主要目的是把这些知识通过我实际的应 ...
- sqlserver三种分页方式性能比较
Liwu_Items表,CreateTime列建立聚集索引 第一种,sqlserver2005特有的分页语法 declare @page intdeclare @pagesize intset @pa ...
- T-sql中的三种分页查询
USE [APS_Future_FT] GO /****** Object: StoredProcedure [dbo].[A_PagingAndSorting] Script Date: 2013/ ...
随机推荐
- cogs 2056. 无平方因子数
2056. 无平方因子数 ★☆ 输入文件:non.in 输出文件:non.out 简单对比时间限制:1 s 内存限制:256 MB [题目描述] 给出正整数n,m,区间[n,m]内的无 ...
- explicit的用法
http://blog.csdn.net/chollima/article/details/3486230
- [ReactVR] Start a Virtual Reality Project Using the React VR CLI
We will learn how to set up a React VR project, run the development mode with hot reloading, and tak ...
- 【万里征程——Windows App开发】控件大集合2
以下再来看看一些前面还没有讲过的控件,只是控件太多以至于无法所有列出来,大家仅仅好举一反三啦. Button 前面最经常使用的控件就是Button啦,Button另一个有意思的属性呢.当把鼠标指针放在 ...
- 使用默认system_health分析死锁(Deadlock)
在2008之前我们分析死锁须要用profiler trace或者trace flag 1222,1204.在2008中引入了一个新功能:Extended Events(扩展事件).能够监控Deadlo ...
- Android ViewPager 动画效果
找到个不错的开源项目:https://github.com/jfeinstein10/JazzyViewPager Android ViewPager 动画效果
- (转载)详解7.0带来的新工具类:DiffUtil
[Android]详解7.0带来的新工具类:DiffUtil 标签: diffutil 2017-04-17 18:21 226人阅读 评论(0) 收藏 举报 分类: Android学习笔记(94) ...
- (转载)Android:学习AIDL,这一篇文章就够了(下)
前言 上一篇博文介绍了关于AIDL是什么,为什么我们需要AIDL,AIDL的语法以及如何使用AIDL等方面的知识,这一篇博文将顺着上一篇的思路往下走,接着介绍关于AIDL的一些更加深入的知识.强烈建议 ...
- <%=%>、<%%>、<%@%>、<%#%>的区别
1.<%= %> 里面放变量名,获取后台的变量值,直接输入变量到页面上,里面放的变量名,未经过encode eg: 后台: seession["ab"]=ab; 前台: ...
- POJ 2029 Get Many Persimmon Trees 【 二维树状数组 】
题意:给出一个h*w的矩形,再给出n个坐标,在这n个坐标种树,再给出一个s*t大小的矩形,问在这个s*t的矩形里面最多能够得到多少棵树 二维的树状数组,求最多能够得到的树的时候,因为h,w都不超过50 ...