Django DRF 分页
分页在DRF当中可以一共有三种,可以通过setttings设置,也可也通过自定义设置
PageNumberPagination
使用URL http://127.0.0.1/CarApi/?page=2&page_size=2
这种分页是按照页码和每页条数进行分页的,需要指定页码和每页条数
常用参数
方法 | 描述 |
---|---|
page_size | 每页数据条数,默认位空,如果settings当中设置了,价值settings当中的配置 |
django_paginator_class | 采用的django分页器 |
page_query_param | 页码参数字段 |
page_query_description | 页码描述 |
page_size_query_param | 页最大显示条数字段 |
page_size_query_description | 分页 |
settings配置
在settings当中编写配置,填入对应的内容
REST_FRAMEWORK = {
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
'PAGE_SIZE': 10 # 每页数目
}
这种方法会对当前项目所有的展示生效,如果单个视图需要关闭,可以进行单独设置:
pagination_class = None
自定义配置
from rest_framework.pagination import PageNumberPagination
class CarPageNumberPagination(PageNumberPagination):
page_query_param = "page"
page_size_query_param = 'page_size' #前端收到页面的关键字名称,默认是page
max_page_size = 10 #每页数据个数
class CarViewSet(viewsets.ModelViewSet):
queryset = Tc.objects.order_by("-id")
serializer_class = CarSerializers
pagination_class = CarPageNumberPagination
LimitOffsetPagination
http://127.0.0.1/CarApi/?limit=20&offset=0
这种分页方法需要设置分页起始数据位置(offset),数据偏移的量(limit)
常用参数
方法 | 描述 |
---|---|
default_limit | 默认每页 |
limit_query_param | 在路由上偏移字段的名称默认是limit |
limit_query_description | 关于偏移的描述 |
offset_query_param | 分页起始位置的名称,默认是offset |
offset_query_description | 分页起始位置的描述 |
max_limit | 最大偏移量限制 |
settings配置
在settings当中编写配置,填入对应的内容
REST_FRAMEWORK = {
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.LimitOffsetPagination',
'PAGE_SIZE': 10 # 每页数目
}
这种方法会对当前项目所有的展示生效,如果单个视图需要关闭,可以进行单独设置:
pagination_class = None
自定义配置
from rest_framework.pagination import LimitOffsetPagination
class CarPageNumberPagination(LimitOffsetPagination):
max_limit = 10 #最大偏移量限制
class CarViewSet(viewsets.ModelViewSet):
queryset = Tc.objects.order_by("-id")
serializer_class = CarSerializers
pagination_class = CarPageNumberPagination
CursorPagination
加密分页,对上下页页码进行了加密
http://127.0.0.1/CarApi/?cursor=cD0zMjgzMTgx
常用参数
方法 | 描述 |
---|---|
cursor_query_param | 页码参数 |
cursor_query_description | 页码描述 |
page_size | 每页数据 |
invalid_cursor_message | 分页起始位置的名称,默认是offset |
ordering | 排序,必须设置,否则会报错 |
page_size_query_param | 页面数据条数设置 |
settings配置
由于没有找到排序的参数替代品,所以,暂时没有找到方法。
自定义配置
class CarPageNumberPagination(CursorPagination):
cursor_query_param = 'cursor'
page_size = 10
ordering = '-id'
class CarViewSet(viewsets.ModelViewSet):
queryset = Tc.objects.order_by("-id")
serializer_class = CarSerializers
pagination_class = CarPageNumberPagination