前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【愚公系列】2022年04月 Python教学课程 76-DRF框架之分页

【愚公系列】2022年04月 Python教学课程 76-DRF框架之分页

作者头像
愚公搬代码
发布2022-04-21 08:09:30
1K0
发布2022-04-21 08:09:30
举报
文章被收录于专栏:历史专栏

文章目录

一、分页

REST 框架包括对可自定义分页样式的支持。这允许您修改将大型结果集拆分为各个数据页的方式。

分页 API 可以支持以下任一功能:

  • 作为响应内容的一部分提供的分页链接。
  • 响应标头中包含的分页链接。

内置样式目前都使用作为响应内容的一部分包含的链接。使用可浏览 API 时,此样式更易于访问。

仅当您使用通用视图或视图集时,才会自动执行分页。如果您使用的是常规 ,则需要自己调用分页 API,以确保返回分页响应。有关示例,请参阅 和 类的源代码。

可以通过将分页类设置为 来关闭分页。

1.全局设置分页

代码语言:javascript
复制
REST_FRAMEWORK = {
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.LimitOffsetPagination',
    'PAGE_SIZE': 100
}

请注意,您需要设置分页类和应使用的页面大小。默认情况下,两者都是 。

您还可以使用该属性在单个视图上设置分页类。通常,您需要在整个 API 中使用相同的分页样式,但您可能希望根据每个视图改变分页的各个方面,例如默认或最大页面大小。

二、PageNumberPagination

1.属性说明

若要设置这些属性,应重写该类,然后启用自定义分页类,如上所述。PageNumberPagination

  • django_paginator_class- 要使用的 Django 分页器类。默认值为 ,对于大多数用例来说应该没问题。django.core.paginator.Paginator
  • page_size- 指示页面大小的数值。如果设置,这将覆盖该设置。默认为与设置键相同的值。PAGE_SIZEPAGE_SIZE
  • page_query_param- 一个字符串值,指示要用于分页控件的查询参数的名称。
  • page_size_query_param- 如果设置,这是一个字符串值,指示查询参数的名称,该参数允许客户端基于每个请求设置页面大小。缺省为 ,表示客户端可能无法控制请求的页面大小。None
  • max_page_size- 如果设置,这是一个数值,指示允许的最大请求页面大小。仅当同时设置此属性时,此属性才有效。page_size_query_param
  • last_page_strings- 字符串值的列表或元组,指示可与 请求集合中最后一页一起使用的值。默认为page_query_param(‘last’,)
  • template- 在可浏览 API 中呈现分页控件时要使用的模板的名称。可以重写以修改呈现样式,或设置为完全禁用 HTML 分页控件。缺省值为 。None"rest_framework/pagination/numbers.html"

三、LimitOffsetPagination

1.属性说明

若要设置这些属性,应重写该类,然后启用自定义分页类,如上所述。LimitOffsetPagination

  • default_limit- 一个数值,指示客户端未在查询参数中提供限制时要使用的限制。默认为与设置键相同的值。PAGE_SIZE
  • limit_query_param- 指示“限制”查询参数名称的字符串值。缺省值为 。‘limit’
  • offset_query_param- 指示“offset”查询参数名称的字符串值。缺省值为 。‘offset’
  • max_limit- 如果设置,这是一个数值,指示客户端可能请求的最大允许限制。缺省值为 。None
  • template- 在可浏览 API 中呈现分页控件时要使用的模板的名称。可以重写以修改呈现样式,或设置为完全禁用 HTML 分页控件。缺省值为 。None"rest_framework/pagination/numbers.html"

四、CursorPagination

1.属性说明

若要设置这些属性,应重写该类,然后启用自定义分页类,如上所述。CursorPagination

  • page_size= 指示页面大小的数值。如果设置,这将覆盖该设置。默认为与设置键相同的值。PAGE_SIZEPAGE_SIZE
  • cursor_query_param= 指示“游标”查询参数名称的字符串值。缺省值为 。‘cursor’
  • ordering= 这应该是一个字符串或字符串列表,指示将对其应用基于游标的分页的字段。例如:。缺省值为 。此值也可能通过在视图上使用来覆盖。ordering = ‘slug’-createdOrderingFilter
  • template= 在可浏览 API 中呈现分页控件时要使用的模板的名称。可以重写以修改呈现样式,或设置为完全禁用 HTML 分页控件。缺省值为 。None"rest_framework/pagination/previous_and_next.html"

五、自定义设置分页

1.自定义

自定义分页

代码语言:javascript
复制
class LargeResultsSetPagination(PageNumberPagination):
    page_size = 1000
    page_size_query_param = 'page_size'
    max_page_size = 10000

class StandardResultsSetPagination(PageNumberPagination):
    page_size = 100
    page_size_query_param = 'page_size'
    max_page_size = 1000

自定义分页返回格式

代码语言:javascript
复制
class CustomPagination(pagination.PageNumberPagination):
    def get_paginated_response(self, data):
        return Response({
            'links': {
                'next': self.get_next_link(),
                'previous': self.get_previous_link()
            },
            'count': self.page.paginator.count,
            'results': data
        })
在这里插入图片描述
在这里插入图片描述

1.视图应用分页

代码语言:javascript
复制
class BillingRecordsView(generics.ListAPIView):
    queryset = Billing.objects.all()
    serializer_class = BillingRecordsSerializer
    pagination_class = LargeResultsSetPagination

2.全局应用分页

代码语言:javascript
复制
REST_FRAMEWORK = {
    'DEFAULT_PAGINATION_CLASS': 'apps.core.pagination.StandardResultsSetPagination'
}

总结

下图为基本使用案例:

PageNumberPagination使用

在这里插入图片描述
在这里插入图片描述

LimitOffsetPagination使用

在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022/04/21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、分页
    • 1.全局设置分页
    • 二、PageNumberPagination
      • 1.属性说明
      • 三、LimitOffsetPagination
        • 1.属性说明
        • 四、CursorPagination
          • 1.属性说明
          • 五、自定义设置分页
            • 1.自定义
              • 1.视图应用分页
                • 2.全局应用分页
                • 总结
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档