数据准备

# 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
})

最新文章

  1. Oracle技术嘉年华
  2. MySQL数据库主键设计原则
  3. NopCommerce适应多数据库方案
  4. Git.Framework 框架随手记-- 分享一个"比较垃圾"的项目
  5. [APAC]手动截取当前活动窗口,并且按规则命名(1/2)
  6. nyoj 62 笨小熊
  7. ios8,xcode6 周边
  8. [Gauss]POJ1753 Flip Game
  9. EqualsBuilder和HashCodeBuilder(重写equal和hashcode)
  10. BZOJ1669: [Usaco2006 Oct]Hungry Cows饥饿的奶牛
  11. 读取本地HTML的小说阅读器应用源码项目
  12. Java学习之equals和==的区别
  13. IOS开发-OC学习-Foundation框架练习
  14. javascript 函数和作用域(函数,this)(六)
  15. USACO奶牛赛跑(逆序对)
  16. .NET Core RSA 签名和验签(密钥为 16 进制编码)
  17. 如何更改vs2013中git的远程仓库url地址
  18. Vue.js 基础知识
  19. Vim中自动在程序起始处添加版权和作者信息
  20. VS2008 试图运行未注册64位调试器组件

热门文章

  1. Windows下安装的Jenkins修改默认端口号8080(修改配置文件的方式)
  2. BZOJ 4238 电压 解题报告
  3. MISC_刷题笔记
  4. angularjs radio 默认选中
  5. iPad如何恢复
  6. vijos 1243 生产产品
  7. [360前端星计划]BlackJack(21点)(纯JS,附总部学习笔记)
  8. 转:inline-block 前世今生
  9. 洛谷 P1119 灾后重建——dijstra
  10. PostgreSQL 荣获 2019 年 O'Reilly 终身成就奖