「Django」rest_framework学习系列-分页
分页
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学习系列-分页的更多相关文章
- 「Django」rest_framework学习系列-视图
方式一 1.settings设置 INSTALLED_APPS = [ ... 'rest_framework', ] 2.views设置 from rest_framework.response i ...
- 「Django」rest_framework学习系列-API访问跨域问题
#以中间件方式解决API数据访问跨域问题1.API下新建文件夹下写PY文件a.引入内置类继承: from django.middleware.common import MiddlewareMixin ...
- 「Django」rest_framework学习系列-路由
自动生成4个url路由:from rest_framework import routersrouter = routers.DefaultRouter()router.register(r'wrx' ...
- 「Django」rest_framework学习系列-渲染器
渲染器:作用于页面,JSONRenderer只是JSON格式,BrowsableAPIRenderer有页面,.AdminRenderer页面以admin形式呈现(需要在请求地址后缀添加?fromat ...
- 「Django」rest_framework学习系列-解析器
满足两个要求,request.Post中才有值 1.请求头要求:请求头中的Content-Type为application/x-www-form-urlencoded 2.数据格式要求 name=x& ...
- 「Django」rest_framework学习系列-序列化
序列化方式一 :在业务类里序列化数据库数据 class RolesView(APIView): def get(self,request,*args,**kwargs): roles = models ...
- 「Django」rest_framework学习系列-版本认证
1.自己写: class UserView(APIView): versioning_class = ParamVersion def get(self,request,*args,**kwargs) ...
- 「Django」rest_framework学习系列-权限认证
权限认证:1.项目下utils文件写permissions.py文件 from rest_framework.permissions import BasePermission class SVIPP ...
- 「Django」rest_framework学习系列-节流控制
1.节流自定义类: import time from api import models VISIT_RECORD = {} class VisitThrottle(BaseThrottle): #设 ...
随机推荐
- hbase实战——(1.1 nosql介绍)
什么是nosql NoSQL(NoSQL = Not Only SQL),意思是不仅仅是SQL的扩展,一般指的是非关系型的数据库. 随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0 ...
- spark的数据结构 RDD——DataFrame——DataSet区别
转载自:http://blog.csdn.net/wo334499/article/details/51689549 RDD 优点: 编译时类型安全 编译时就能检查出类型错误 面向对象的编程风格 直接 ...
- Ubuntu16.04下 protobuf3.4.0 的安装与卸载
感谢原文作者:https://blog.csdn.net/xiexievv/article/details/47396725 一. 安装 下载protobuf protobuf下载地址:https:/ ...
- 线段树-hdu2795 Billboard(贴海报)
hdu2795 Billboard 题意:h*w的木板,放进一些1*L的物品,求每次放空间能容纳且最上边的位子 思路:每次找到最大值的位子,然后减去L 线段树功能:query:区间求最大值的位子(直接 ...
- 博弈---ZOJ 2083 Win the Game(染绳子)
原题:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2083 大意:两个人分别对n条绳子染 每次染m长 最后染不下的输,问先 ...
- 【SSH框架】之Struts2系列(一)
微信公众号:compassblog 欢迎关注.转发,互相学习,共同进步! 有任何问题,请后台留言联系 1.Struts2框架概述 (1).什么是Struts2 Struts2是一种基于MVC模式的轻量 ...
- MySQL 日志功能详解
MySQL日志分类 1:查询日志 :query log 2:慢查询日志:slow_query_log 查询执行时长超过指定时长的查询操作所记录日志 3:错误日志:error log ...
- PAT 甲级 1027 Colors in Mars
https://pintia.cn/problem-sets/994805342720868352/problems/994805470349344768 People in Mars represe ...
- 简单的 php 防注入、防跨站 函数
/** * 简单的 php 防注入.防跨站 函数 * @return String */ function fn_safe($str_string) { //直接剔除 $_arr_dangerChar ...
- Java多线程 -join用法
阿里面试官问我这个问题,我仔细总结了一下: 参考:sleep.yield.wait.join的区别(阿里面试) 1. join()介绍 join() 定义在Thread.java中.join() 的作 ...