分页
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学习系列-分页的更多相关文章

  1. 「Django」rest_framework学习系列-视图

    方式一 1.settings设置 INSTALLED_APPS = [ ... 'rest_framework', ] 2.views设置 from rest_framework.response i ...

  2. 「Django」rest_framework学习系列-API访问跨域问题

    #以中间件方式解决API数据访问跨域问题1.API下新建文件夹下写PY文件a.引入内置类继承: from django.middleware.common import MiddlewareMixin ...

  3. 「Django」rest_framework学习系列-路由

    自动生成4个url路由:from rest_framework import routersrouter = routers.DefaultRouter()router.register(r'wrx' ...

  4. 「Django」rest_framework学习系列-渲染器

    渲染器:作用于页面,JSONRenderer只是JSON格式,BrowsableAPIRenderer有页面,.AdminRenderer页面以admin形式呈现(需要在请求地址后缀添加?fromat ...

  5. 「Django」rest_framework学习系列-解析器

    满足两个要求,request.Post中才有值 1.请求头要求:请求头中的Content-Type为application/x-www-form-urlencoded 2.数据格式要求 name=x& ...

  6. 「Django」rest_framework学习系列-序列化

    序列化方式一 :在业务类里序列化数据库数据 class RolesView(APIView): def get(self,request,*args,**kwargs): roles = models ...

  7. 「Django」rest_framework学习系列-版本认证

    1.自己写: class UserView(APIView): versioning_class = ParamVersion def get(self,request,*args,**kwargs) ...

  8. 「Django」rest_framework学习系列-权限认证

    权限认证:1.项目下utils文件写permissions.py文件 from rest_framework.permissions import BasePermission class SVIPP ...

  9. 「Django」rest_framework学习系列-节流控制

    1.节流自定义类: import time from api import models VISIT_RECORD = {} class VisitThrottle(BaseThrottle): #设 ...

随机推荐

  1. node stream流

    stream 模块可以通过以下方式使用: const stream = require('stream');   Node.js 中有四种基本的流类型: Writable - 可写入数据的流(例如 f ...

  2. SVN服务器搭建及客户端配置

    为什么要使用SVN? 在程序的编写过程中,每个程序员都会负责开发一个或多个模块,且开发中会生成很多不同的版本, 这就需要程序员有效的管理代码,在需要的时候可以迅速,准确取出相应的版本. Subvers ...

  3. ie6下,莫名被复制出一段文字解决

    在IE6下使用浮动可能会出现文字重复的情况. 在IE6下,浮动层之间有注释文字的话,之前那个浮动层的内容文字就有可能遭遇一个“隐形”的复制,但是代码里查看文字可并没有多出来. 看个例子: HTML & ...

  4. 20181016-4 Alpha阶段第1周/共2周 Scrum立会报告+燃尽图 02

    此次作业要求参见 [https://edu.cnblogs.com/campus/nenu/2018fall/homework/2247] Scrum master:祁玉 一.小组介绍 组长:王一可 ...

  5. 团队项目NABCD

    团队成员及项目简介 团队名:伍陸柒 团队成员: 李  俏(20132912 信1301-2) 郝  颖(20132919 信1301-2)http://www.cnblogs.com/haoying1 ...

  6. 【第二周】Java实现英语文章词频统计(改进1)

    本周根据杨老师的spec对英语文章词频统计进行了改进 1.需求分析: 对英文文章中的英文单词进行词频统计并按照有大到小的顺序输出, 2.算法思想: (1)构建一个类用于存放英文单词及其出现的次数 cl ...

  7. 5th 各组作品alpha发布体会

    1.  俄罗斯方块   武志远 可以进行游戏,界面很友好,游戏运行也很流畅,并找到两名同学现场体验,游戏完成度很好. 2.  连连看游戏  张金生 可以进行游戏,实现了背景音乐播放等附加功能,界面清晰 ...

  8. 2nd 词频统计更新

    词频统计更新 实现功能:从控制台输入文件路径,并统计单词总数及不重复的单词数,并输出所有单词词频,同时排序. 头文件 #include <stdio.h> #include <std ...

  9. 使用vue的mixins混入实现对正在编辑的页面离开时提示

    mixins.ts import { Vue, Component, Watch } from "vue-property-decorator" Component.registe ...

  10. sleep() 与 wait()的比较

    1.这两个方法来自不同的类分别是,sleep来自Thread类,和wait来自Object类. sleep是Thread的静态类方法,谁调用的谁去睡觉,即使在a线程里调用了b的sleep方法,实际上还 ...