分页器

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)

最新文章

  1. HTML5滑动(swipe)事件
  2. yii2 输出xml格式数据
  3. Web前端代码规范与页面布局
  4. hash_map map
  5. android开发之service详解
  6. linux系统巡检脚本shell实例
  7. MEF初体验之三:Exports声明
  8. .NET Core2.0 MVC中使用EF访问数据
  9. java使用Websocket获取HttpSession出现的问题与解决
  10. [ExtJS5学习笔记]第二十九节 sencha ext js 5.1.0中动态更换皮肤主题
  11. CF1093F Vasya and Array
  12. Java使用BigDecimal计算保留位数不对问题定位
  13. Shell 常见理论问答
  14. css font-family属性设置中文字体乱码
  15. php开发中应该注意的错误开关与常见处理[开发篇]
  16. LintCode: Identical Binary Tree
  17. web.xml中context-param详解
  18. ORACEL 创建表空间
  19. Java转python第二天
  20. 【system.date】使用说明

热门文章

  1. blfs(systemv版本)学习笔记-wget的安装与配置
  2. curl 发送 post 请求
  3. Docker-compose 编排工具安装
  4. CSS之Normalize.css的使用(重置表)
  5. 【代码笔记】iOS-tableView滑动的范围函数
  6. IDEA项目搭建七——使用Feign简化消费者端操作
  7. 【转】巧用DOS tree命令+批处理 实现 指定文件 批量复制!
  8. Android中的padding和margin的区别
  9. Login case
  10. iOS开发-本地存储(偏好设置,Plist,归档)