djangorestframework-jwt 分页器 三种
数据准备
# 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 分页器 三种的更多相关文章
- 2019年6月14日 Web框架之Django_07 进阶操作(MTV与MVC、多对多表三种创建方式、前后端传输数据编码格式contentType、ajax、自定义分页器)
摘要 MTV与MVC 多对多表三种创建方式 ajax ,前后端传输数据编码格式contentType 批量插入数据和自定义分页器 一.MVC与MTV MVC(Model View Controller ...
- DjangoRestFramework框架三种分页功能的实现 - 在DjangoStarter项目模板中封装
前言 继续Django后端开发系列文章.刚好遇到一个分页的需求,就记录一下. Django作为一个"全家桶"型的框架,本身啥都有,分页组件也是有的,但默认的分页组件没有对API开发 ...
- Django-REST-Framework JWT 实现SSO认证(上)
一.什么是Django-REST-Framework? Django-REST-framework 是基于Django框架的一个web RESTful风格开发的框架,它可以实现API接口的快速开发,但 ...
- struts2 Action 接收参数的三种方法
刚学Struts2 时 大家可能遇到过很多问题,这里我讲一下Action 接收参数的三种方法,我曾经在这上面摔过一回.所以要警醒一下自己..... 第一种:Action里声明属性,样例:account ...
- python 全栈开发,Day94(Promise,箭头函数,Django REST framework,生成json数据三种方式,serializers,Postman使用,外部python脚本调用django)
昨日内容回顾 1. 内容回顾 1. VueX VueX分三部分 1. state 2. mutations 3. actions 存放数据 修改数据的唯一方式 异步操作 修改state中数据的步骤: ...
- day77:luffy:导航栏的实现&DjangoRestFramework JWT&多条件登录
目录 1.导航栏的实现 2.登录前戏:用户表初始化 3.DjangoRestFramework JWT 4.多条件登录 5.登录状态的判断和退出登录 1.导航栏的实现 1.设计导航栏的model模型类 ...
- 简谈百度坐标反转至WGS84的三种思路
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 基于百度地图进行数据展示是目前项目中常见场景,但是因为百度地图 ...
- 测试一下StringBuffer和StringBuilder及字面常量拼接三种字符串的效率
之前一篇里写过字符串常用类的三种方式<java中的字符串相关知识整理>,只不过这个只是分析并不知道他们之间会有多大的区别,或者所谓的StringBuffer能提升多少拼接效率呢?为此写个简 ...
- Objective-C三种定时器CADisplayLink / NSTimer / GCD的使用
OC中的三种定时器:CADisplayLink.NSTimer.GCD 我们先来看看CADiskplayLink, 点进头文件里面看看, 用注释来说明下 @interface CADisplayLin ...
随机推荐
- c++ 递归思想 阶乘
#include "stdio.h" #include "iostream" long fact(int n); int main() { int i; sca ...
- bzoj 2002[Hnoi2010]Bounce 弹飞绵羊(分治分块)
Description 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装置 ...
- 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛 GSM Base Station Identification (点在多边形内模板)
In the Personal Communication Service systems such as GSM (Global System for Mobile Communications), ...
- 数据中 int 转 double 方式
在mysql 中,得出一个int整数型数值 int整数值/int整数值 在被引用时,发现还是int类型 但是实际需要转换为 double 小数类型 查看相关函数,没有找到好的方法 后采用了 rou ...
- 2018年最新Java面试题及答案整理(持续完善中…)
2018年最新Java面试题及答案整理(持续完善中…) 基础篇 基本功 面向对象特征 封装,继承,多态和抽象 封装封装给对象提供了隐藏内部特性和行为的能力.对象提供一些能被其他对象访问的方法来改变它内 ...
- Gradle Wrapper 介绍
回顾 上一篇介绍了如何使用 Gradle 快速创建 Java 项目,开始讲 Gradle Wrapper 之前先来重温一下通过 gradle init 命令创建的 Java 项目目录结构 ├── bu ...
- 终于好了 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) ...
- HTML版简历
页面预览 在线演示
- Excel中数字和字母混合时提取某些字符进行排序
在excel中,当数字和字母混合在一起的时候,会出现排序错误的情况 比如下图的这种情况.我们希望的是2排在1后面,但是实际上10却排在了1的后面.这时候我们就需要把字符串中的数字提取出来进行排序 第一 ...
- “希希敬敬对”队软件工程第九次作业-beta冲刺第五次随笔
“希希敬敬对”队软件工程第九次作业-beta冲刺第五次随笔 队名: “希希敬敬对” 龙江腾(队长) 201810775001 杨希 201810812008 何敬 ...