好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Django drf分页器的使用详解

前言

当后台返回的数据过多时,我们就要配置分页器,比如一页最多只能展示10条等等, drf 中默认配置了3个分页面

PageNumberPagination:基础分页器,性能略差 LimitOffsetPagination:偏移分页器 CursorPagination:游标分页器,性能强大

PageNumberPagination

基础分页器 PageNumberPagination ,数据量越大性能越差。

首先我们在 app 中创建一个 pagination.py 文件,然后自定义一个分页器类,继承自 PageNumberPagination :

from rest_framework.pagination import PageNumberPagination
class MyPageNumberPagination(PageNumberPagination):
    """
    普通分页,数据量编程客栈越大性能越 http://HdhCmsTestcppcns测试数据 差
    """
    # 默认页面展示的条数
    page_size = 3
    # 前端访问url需要添加 ?page=页码
    page_query_param = 'page'
 编程客栈   # 用户自定义返回的条数,格式?page_siz编程客栈e=页数
    page_size_query_param = "page_size"
    # 用户自定义返回的条数最大限制,数值超过5也只展示5条
    max_page_size = 5

如果我们需要局部配置则在类视图中访问使用 pagination_class = MyPageNumberPagination 即可 如果是全局配置,则在 settings.py 文件中配置如下:

REST_FRAMEWORK = {
    'DEFAULT_PAGINATION_CLASS': 'api.pagination.MyPageNumberPagination',
}

之后我们访问 url 只需在后面加入 ?page=页码数 即可 编程客栈 比如 http://127.0.0.1:8000/api/cars/?page=2 ,代表访问第二页的数据,数据的条数默认为 page_size 的值 比如 http://127.0.0.1:8000/api/cars/?page=2&page_size=5 ,代表访问第二页的数据,用户自定义返回的条数为5条

LimitOffsetPagination

首先我们自定义一个分页器类,继承自 LimitOffsetPagination :

class MyLimitOffsetPagination(LimitOffsetPagination):
    # url后面跟limit请求参数,
    limit_query_param = 'limit'
    # url后面跟offset请求参数
    offset_query_param = 'offset'
    # 最大限制20条
    max_limit = 20
    # 默认限制3条
    default_limit = 3

之后我们访问 url 只需要在后面加入 ?limit=10 即可 比如 http://127.0.0.1/api/cars/?limit=10 代表访问的数据最多展示10条,如果你 limit 的值> max_limit ,那么还是按照 max_limit 的值来展示数据的条数 比如 http://127.0.0.1/api/cars/?offset=1 ,这里没有 limit 参数,所以默认展示3条, offset=1 代表从数据库列表中提取数据的时候,是从下标1开始提取,比如提取的数据列表是 ['test1', 'test2', 'test3', 'test4'] ,本来我们默认提取前3条,但是你加上 offset=1 后,他是从列表下标为1开始提取,所以最后提取的数据是 test2 和 test3 和 test4

CursorPagination

游标分页器跟基础分页器用法差不多,只是游标分页的针对下一页数据的 url 进行了加密 首先我们自定义一个分页器类,继承自 CursorPagination :

class MyCursorPagination(CursorPagination):
    """
    Cursor 光标分页 性能高,安全
    """
    page_size = 10
    page_size_query_param = "page_size"
    max_page_size = 20
    ordering = '-price'

如果我们视图中使用了排序过滤 filter_backends = [OrderingFilter] ,那么我们在访问 url 的时候必须携带参数 ?ordering=需要排序的字段 。

以上就是Django drf分页器的使用的详细内容,更多关于Django drf分页器的资料请关注我们其它相关文章!

查看更多关于Django drf分页器的使用详解的详细内容...

  阅读:35次