数据准备

# models
class Teacher(models.Model):
name = models.CharField(max_length=32)
salary = models.DecimalField(max_digits=5, decimal_places=2)
# objson
class TeacherJson(serializers.ModelSerializer):
class Meta:
model = models.Teacher
fields = '__all__'
# urls
url(r'^teachers/', views.Teachers.as_view()), # views
class Teachers(APIView):
def post(self, request):
list = []
for i in range(1, 51):
list.append(models.Teacher(name="%s老师" % i, salary=i))
models.Teacher.objects.bulk_create(list)
return Response({
'status': 0,
'msg': 'ok'
})

简单分页

from rest_framework.pagination import PageNumberPagination
class Teachers(APIView):
permission_classes = []
throttle_classes = []
throttle_classes = []
def get(self, request):
# 没有分页的所有数据
teacher_list = models.Teacher.objects.all() # 完成分页
# 1) 初始化分页对象
page_simple = PageNumberPagination() # 2) 配置分页对象
# page_simple.page_size = api_settings.PAGE_SIZE
# 一页显示的条数
page_simple.page_size = 5
# /teachers/?pages=3 默认page
page_simple.page_query_param = 'pages'
# /teachers/?pages=3&line=10 用户可以自定义访问一页有多少条数据
page_simple.page_size_query_param = 'line'
# 限制用户自定义一页最大能访问的条数
page_simple.max_page_size = 10 # 3) 操作分页后一页的数据
teacher_page_list = page_simple.paginate_queryset(teacher_list, request, self) # 将一页的数据序列化后返回给前台
teacher_data = objson.TeacherJson(teacher_page_list, many=True).data
return Response({
'status': 0,
'msg': 'ok',
'results': teacher_data
})

偏移分页

from rest_framework.pagination import LimitOffsetPagination
class Teachers(APIView):
def get(self, request):
teacher_list = models.Teacher.objects.all() # 完成分页
# 1) 初始化分页对象
page_limit = LimitOffsetPagination() # 2) 配置分页对象
# 一页显示的条数
page_limit.default_limit = 5
# 自定义一页获取的条数
page_limit.limit_query_param = 'limit'
# 从哪条数据开始查询
page_limit.offset_query_param = 'offset'
# 自定义最大获取一页的条数
page_limit.max_limit = 8 # 3) 操作分页数据
teacher_page_list = page_limit.paginate_queryset(teacher_list, request, self) teacher_data = objson.TeacherJson(teacher_page_list, many=True).data
return Response({
'status': 0,
'msg': 'ok',
'previous': page_limit.get_previous_link(), # 上一页
'next': page_limit.get_next_link(), # 下一页
'results': teacher_data
}) # return page_limit.get_paginated_response(teacher_data) # 内部提供的Response对象

游标分页

from rest_framework.pagination import CursorPagination
class Teachers(APIView):
def get(self, request):
teacher_list = models.Teacher.objects.all() # 完成分页
# 1) 初始化分页对象
page_cursor = CursorPagination() # 2) 配置分页对象
# 一页的条数
page_cursor.page_size = 10
# 排序的字段,可以正向也可以反向
page_cursor.ordering = '-id'
# 游标的关键字
page_cursor.cursor_query_param = 'cursor' # 3) 操作分页数据
teacher_page_list = page_cursor.paginate_queryset(teacher_list, request, self) teacher_data = objson.TeacherJson(teacher_page_list, many=True).data
return Response({
'status': 0,
'msg': 'ok',
'previous': page_cursor.get_previous_link(), # 上一页
'next': page_cursor.get_next_link(), # 下一页
'results': teacher_data
})

djangorestframework-jwt 分页器 三种的更多相关文章

  1. 2019年6月14日 Web框架之Django_07 进阶操作(MTV与MVC、多对多表三种创建方式、前后端传输数据编码格式contentType、ajax、自定义分页器)

    摘要 MTV与MVC 多对多表三种创建方式 ajax ,前后端传输数据编码格式contentType 批量插入数据和自定义分页器 一.MVC与MTV MVC(Model View Controller ...

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

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

  3. Django-REST-Framework JWT 实现SSO认证(上)

    一.什么是Django-REST-Framework? Django-REST-framework 是基于Django框架的一个web RESTful风格开发的框架,它可以实现API接口的快速开发,但 ...

  4. struts2 Action 接收参数的三种方法

    刚学Struts2 时 大家可能遇到过很多问题,这里我讲一下Action 接收参数的三种方法,我曾经在这上面摔过一回.所以要警醒一下自己..... 第一种:Action里声明属性,样例:account ...

  5. python 全栈开发,Day94(Promise,箭头函数,Django REST framework,生成json数据三种方式,serializers,Postman使用,外部python脚本调用django)

    昨日内容回顾 1. 内容回顾 1. VueX VueX分三部分 1. state 2. mutations 3. actions 存放数据 修改数据的唯一方式 异步操作 修改state中数据的步骤: ...

  6. day77:luffy:导航栏的实现&DjangoRestFramework JWT&多条件登录

    目录 1.导航栏的实现 2.登录前戏:用户表初始化 3.DjangoRestFramework JWT 4.多条件登录 5.登录状态的判断和退出登录 1.导航栏的实现 1.设计导航栏的model模型类 ...

  7. 简谈百度坐标反转至WGS84的三种思路

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 基于百度地图进行数据展示是目前项目中常见场景,但是因为百度地图 ...

  8. 测试一下StringBuffer和StringBuilder及字面常量拼接三种字符串的效率

    之前一篇里写过字符串常用类的三种方式<java中的字符串相关知识整理>,只不过这个只是分析并不知道他们之间会有多大的区别,或者所谓的StringBuffer能提升多少拼接效率呢?为此写个简 ...

  9. Objective-C三种定时器CADisplayLink / NSTimer / GCD的使用

    OC中的三种定时器:CADisplayLink.NSTimer.GCD 我们先来看看CADiskplayLink, 点进头文件里面看看, 用注释来说明下 @interface CADisplayLin ...

随机推荐

  1. c++ 递归思想 阶乘

    #include "stdio.h" #include "iostream" long fact(int n); int main() { int i; sca ...

  2. bzoj 2002[Hnoi2010]Bounce 弹飞绵羊(分治分块)

    Description 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装置 ...

  3. 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛 GSM Base Station Identification (点在多边形内模板)

    In the Personal Communication Service systems such as GSM (Global System for Mobile Communications), ...

  4. 数据中 int 转 double 方式

    在mysql 中,得出一个int整数型数值 int整数值/int整数值   在被引用时,发现还是int类型 但是实际需要转换为 double 小数类型 查看相关函数,没有找到好的方法 后采用了 rou ...

  5. 2018年最新Java面试题及答案整理(持续完善中…)

    2018年最新Java面试题及答案整理(持续完善中…) 基础篇 基本功 面向对象特征 封装,继承,多态和抽象 封装封装给对象提供了隐藏内部特性和行为的能力.对象提供一些能被其他对象访问的方法来改变它内 ...

  6. Gradle Wrapper 介绍

    回顾 上一篇介绍了如何使用 Gradle 快速创建 Java 项目,开始讲 Gradle Wrapper 之前先来重温一下通过 gradle init 命令创建的 Java 项目目录结构 ├── bu ...

  7. 终于好了 ipython 里执行dos命令 显示结果却显示在kernel界面里 搞定了

    import os cmd = r'type c:\foo.txt' os.system(cmd) import os cmd = r'type c:\foo.txt' os.system(cmd) ...

  8. HTML版简历

    页面预览 在线演示

  9. Excel中数字和字母混合时提取某些字符进行排序

    在excel中,当数字和字母混合在一起的时候,会出现排序错误的情况 比如下图的这种情况.我们希望的是2排在1后面,但是实际上10却排在了1的后面.这时候我们就需要把字符串中的数字提取出来进行排序 第一 ...

  10. “希希敬敬对”队软件工程第九次作业-beta冲刺第五次随笔

    “希希敬敬对”队软件工程第九次作业-beta冲刺第五次随笔 队名:  “希希敬敬对” 龙江腾(队长) 201810775001 杨希                   201810812008 何敬 ...