分页器

PageNumberPagination(普通分页器)

说明:

  配置分页器的中最大显示个数(也可在setting中做全局配置)
    page.page_size = 2

REST_FRAMEWORK = {
# 每页显示两条
'PAGE_SIZE': 2,
}

  配置地址栏中的地址(http://127.0.0.1:8001/books/?page=2)对应最后的page
    page.page_query_param = 'page'
  指定当前页显示多少条
    page.page_size_query_param = 'size'
  限制最大页数
    page.max_page_size = 6

class Book(ViewSetMixin, APIView):
def get_all(self, request):
db_books = models.Books.objects.all()
page = PageNumberPagination()
page.page_size = 2
page.page_query_param = 'page'
page.page_size_query_param = 'size'
page.max_page_size = 6
book_page = page.paginate_queryset(db_books, request, view=self)
books_ser = myser.BookSerializers(book_page, many=True)
return Response(books_ser.data)

LimitOffsetPagination(偏移分页器)

说明:

  每页显示的条数

    default_limit = api_settings.PAGE_SIZE

  标杆值

    offset_query_param = 'offset'

  往后偏移多少

    limit_query_param = 'limit'

  每页显示最大的条数

    max_limit = None

  注:要取的条数,如果超过了,还剩多少,就显示多少

from rest_framework.pagination import LimitOffsetPagination

class Book(ViewSetMixin, APIView):
def get_all(self, request):
db_books = models.Books.objects.all()
page = LimitOffsetPagination()
page.default_limit = 3
page.offset_query_param = 'offset'
page.max_limit = 3
book_page = page.paginate_queryset(db_books, request, view=self)
books_ser = myser.BookSerializers(book_page, many=True)
return Response(books_ser.data)

CursorPagination(加密分页器-查询速度很快)

说明:

  按id排序

    page.ordering = 'nid'

  查询的key值

    cursor_query_param = 'cursor'

  每页显示多少条

    page_size = api_setting.PAGE_SIZE

class Book(ViewSetMixin, APIView):
def get_all(self, request):
db_books = models.Books.objects.all()
page = CursorPagination()
# 设置根据数据库中哪个字段排序
page.ordering = 'id'
book_page = page.paginate_queryset(db_books, request, view=self)
books_ser = myser.BookSerializers(book_page, many=True)
# return Response(books_ser.data)
return page.get_paginated_response(books_ser.data)

使用总结:

  生成一个对象普通,偏移,加密)

    ***重点:可以修改对象的属性

  -ret = 对象.paginate_queryset(book_list,request,self)

  -丢到序列化类中,完成序列化

  -最后返回

版本控制

  基于url的正则方式:URLPathVersioning(/v1/users/)

  基于url的get传参方式:QueryParameterVersioning(users?version=v1)

  基于 accept 请求头方式:AcceptHeaderVersioning(Accept: application/json; version=1.0)

局部使用:

versioning_class = URLPathVersioning

全局使用:

REST_FRAMEWORK = {
'DEFAULT_VERSIONING_CLASS':'rest_framework.versioning.QueryParameterVersioning',
'DEFAULT_VERSION': 'v1', # 默认版本(从request对象里取不到,显示的默认值)
'ALLOWED_VERSIONS': ['v1', 'v2'], # 允许的版本
'VERSION_PARAM': 'version' # URL中获取值的key
}

URLPathVersioning示例

路由配置:

urlpatterns = [
url(r'^(?P<version>[v1|v2]+)/books/', views.Book.as_view({'get': 'get_all'}), name='ttt'),
]

视图函数:

from rest_framework.versioning import URLPathVersioning

class Book(ViewSetMixin, APIView):
versioning_class = URLPathVersioning
def get_all(self, request, version):
db_books = models.Books.objects.all()
print(request.version)
reverse_url = request.versioning_scheme.reverse('ttt', request=request)
print(reverse_url)
page = PageNumberPagination()
page.max_page_size = 6
book_page = page.paginate_queryset(db_books, request, view=self)
books_ser = myser.BookSerializers(book_page, many=True)
return page.get_paginated_response(books_ser.data)

day87的更多相关文章

  1. python全栈开发day87~91-整个流程梳理、CRM功能、知识点梳理

    1.流程 1. stark组件 1. 启动 2.注册 3.url设计 4.视图函数设计 1.展示数据头 2.展示数据 3.list_display功能实现 4.list_display_links 功 ...

  2. python 全栈开发,Day87(ajax登录示例,CSRF跨站请求伪造,Django的中间件,自定义分页)

    一.ajax登录示例 新建项目login_ajax 修改urls.py,增加路径 from app01 import views urlpatterns = [ path('admin/', admi ...

  3. day87:luffy:结算页面积分&支付宝接口

    目录 1.积分 2.支付 1.积分 1.关于积分的表结构 1.在user表中添加credit字段 + 设计一个积分的表结构 user/models.py class User(AbstractUser ...

  4. 10.15仿admin开发stark组件(一)

    2018-10-15 12:28:50 越努力,越幸运!永远不要高估自己! 低调做人,高调做事! 明天开stark项目!! admin 参考连接: http://www.cnblogs.com/yua ...

  5. Python 之反射和普通方式对比(模拟Web框架)

    先模拟一个web页面的选择不同输出不同 vim day8-7.py #!/usr/bin/python # -*- coding:utf-8 -*- import home import accoun ...

  6. 老男孩Python高级全栈开发工程师三期完整无加密带课件(共104天)

    点击了解更多Python课程>>> 老男孩Python高级全栈开发工程师三期完整无加密带课件(共104天) 课程大纲 1.这一期比之前的Python培新课程增加了很多干货:Linux ...

  7. 国内某Python大神自创完整版,系统性学习Python

    很多小伙伴纠结于这个一百天的时间,我觉得完全没有必要,也违背了我最初放这个大纲上来的初衷,我是觉得这个学习大纲还不错,自学按照这个来也能相对系统的学习知识,而不是零散细碎的知识最后无法整合,每个人的基 ...

  8. 22期老男孩Ptython全栈架构师视频教程

    老男孩Ptython全栈架构师视频教程 Python最新整理完整版22期视频教程 超60G课程容量<ignore_js_op> <ignore_js_op> <ignor ...

随机推荐

  1. VUE CLI 3.0 项目引入 ElementUI

    ElementUI 官网: http://element-cn.eleme.io/#/zh-CN/component/installation 一.通过npm安装依赖包 1. 进入到项目目录,执行指令 ...

  2. pip install 报错

    问题描述,在使用pip安装django相关软件包时,提示错误如下: [root@test4 install]# pip install django==1.6 Downloading/unpackin ...

  3. ImageButton和ImageView设置点击透明区域不响应

    思路 ImageView和ImageButton都可以设置background和设置src,两者的区别自行度娘.由于两者的不同,获取它们的图片资源的方法也不同.倘若设置的是background,那么需 ...

  4. Android basics

    只要是Android中的控件,最终都继承自View.

  5. 开始记录 Windows Phone 生涯

    已经快接近三年没有更新博客了,最近打算把博客这块从新建设起来. 由于工作原因,现在已经很久没有接触过Android了.目前工作是全力 Windows Phone,并且也已经工作一年半了,以后会陆续把之 ...

  6. vue路由的配置

    一.准备工作 1安装vue-cli  npm install vue-cli -g 2检查是否安装成功 vue -V(大写V) 3初始化一个新的项目 vue init  webpack vue-dem ...

  7. JavaScript大杂烩8 - 理解文本解析的"黄金搭档"

    文本解析"黄金搭档" - String与RegExp对象 文本解析是任何语言中最常用的功能,JavaScript中也是一样,而正则表达式作为最常用的方式,JavaScript也同样 ...

  8. Linux 小知识翻译 - 「路径设置」

    这次聊聊路径的使用,这里的路径是「命令搜索路径」的简称. 在Linux上执行命令的时候,本来是需要命令的所在位置的绝对路径的,就像「/usr/bin/passwd」这样. 但是,对于经常使用的命令,如 ...

  9. (10)Python函数

  10. luogu P4718 【模板】Pollard-Rho算法(贴代码)

    嘟嘟嘟 从标题中能看出来,我只是想贴一个代码. 先扯一会儿. 前几天模拟考到了这东西,今天有空就学了一下. 到网上找资料,发现前置技能是miller-rabin筛法,于是我还得先学这么个东西. 学mi ...