Django - DRF分页组件

  • 作者:lwj
  • 分类:Django
  • 发表日期:2021-12-19 15:10:40
  • 阅读(51)
  • 评论(0)

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      # 指定分页类

配置路由后请求如下:

上一篇: 没有了

下一篇: appium-desktop安装与使用

觉得不错,支持一下!

提交评论

您尚未登录,登录之后方可评论~ 登录 or 注册

评论列表

暂无评论
返回顶部

建议反馈

1. 可在博文底部留言评论

2. 发邮件到i_suichuan@163.com