DRF提供三种分页方式
PageNumberPagination: 普通分页(查看第n页,每页显示N条)
LimitOffsetPagination: 偏移分页(和sql的limit一样)
CursorPagination: 加密分页,只能看上一页和下一页,速度快
全局分页配置(全局所有接口通赢),以普通分页为例
# DRF配置项
REST_FRAMEWORK = {
# 分页器选择普通分页器
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
# 默认的每页数据量
'PAGE_SIZE': 10
}
除了全局配置方式,DRF还可以在视图中进行自定义配置
普通分页
from rest_framework.generics import GenericAPIView
from rest_framework.viewsets import ModelViewSet
from rest_framework.pagination import PageNumberPagination
from .models import BookInfo
from .serializers import BookInfoSerializers
# 分页器
class PageNumber(PageNumberPagination):
page_size = 2 # 每页数量
page_query_param = 'page' # 前端发送的页数关键字,默认为’page‘
page_size_query_param = 'page_size' # 前端发送的每页条数参数名,默认为None
max_page_size = 50 # 每页最大显示数量
class ViewPageNumber(ModelViewSet, GenericAPIView):
queryset = BookInfo.objects.all()
serializer_class = BookInfoSerializers
pagination_class = PageNumber # 指定分页器
配置路由后请求如下:
偏移分页
from rest_framework.generics import GenericAPIView
from rest_framework.viewsets import ModelViewSet
from rest_framework.pagination import LimitOffsetPagination
from .models import BookInfo
from .serializers import BookInfoSerializers
# 分页器
class LimitOffset(LimitOffsetPagination):
default_limit = 2 # 不指定看几条,那么默认就看两条
max_limit = 5 # 限制前端每次最多能看几条
limit_query_param = 'limit' # 每页条数前端传参的参数名
offset_query_param = 'offset' # 前端传参的偏移参数名
class ViewLimitOffset(ModelViewSet, GenericAPIView):
queryset = BookInfo.objects.all()
serializer_class = BookInfoSerializers
pagination_class = LimitOffset # 指定分页类
配置路由后请求如下:
加密分页
from rest_framework.generics import GenericAPIView
from rest_framework.viewsets import ModelViewSet
from rest_framework.pagination import LimitOffsetPagination
from .models import BookInfo
from .serializers import BookInfoSerializers
# 加密分页
class Cursor(CursorPagination):
cursor_query_param = 'cursor' # 表示url中页码的参数
page_size = 2 # 不指定看几条,那么默认就看两条
ordering = 'id' # 表示返回数据以id排序,先排序后分页
page_size_query_param = 'size' # 表示每页显示数据量的参数
max_page_size = 5 # 表示每页最大显示数量,做限制使用,避免突然大量的查询数据,数据库崩溃
class ViewLimitOffset(ModelViewSet, GenericAPIView):
queryset = BookInfo.objects.all()
serializer_class = BookInfoSerializers
pagination_class = Cursor # 指定分页类
配置路由后请求如下:
提交评论
您尚未登录,登录之后方可评论~ 登录 or 注册