📜  drf 默认分页 (1)

📅  最后修改于: 2023-12-03 14:40:52.365000             🧑  作者: Mango

DRF 默认分页

Django Rest Framework 提供了一些默认的分页选项,以帮助开发人员处理大量数据并使 API 更容易导航。这些分页器可在全局和视图级别配置,并可以在视图中轻松使用。在本文中,我们将学习 DRF 提供的默认分页器。

全局分页器

从版本 3.2 开始,DRF 为全局 API 配置添加了一个分页器。因此,您不再需要在每个视图中指定分页器类。要配置默认全局分页器,请在您的 settings.py 文件中添加以下行:

REST_FRAMEWORK = {
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
    'PAGE_SIZE': 10
}

在上述代码中,我们指定了所有 API 视图都将使用 PageNumberPagination 类作为默认分页器,并且我们将每页的大小设置为 10。

视图级分页器

如果您需要使用不同的分页器,您可以在视图中进行指定。例如,如果您希望使用 LimitOffsetPagination 分页器,则可以在视图中指定该类,如下所示:

from rest_framework.pagination import LimitOffsetPagination

class ExampleView(APIView):
    pagination_class = LimitOffsetPagination

现在,该视图将使用 LimitOffsetPagination 分页器而不是默认的 PageNumberPagination 分页器。

分页器的返回值

返回值必须是一个包含分页信息和数据的字典。分页信息是一个包含以下键值的字典:

  • count:匹配查询条件的总对象数。
  • next:当当前查询集有下一页时,返回其下一页的 URL。如果当前页面是最后一页,则该值为 null
  • previous:当当前查询集有上一页时,返回其上一页的 URL。如果当前页面是第一页,则该值为 null

下面是一个使用 PageNumberPagination 分页器的示例代码片段的响应结果:

{
    "count": 100,
    "next": "http://api.example.com/accounts/?page=4",
    "previous": "http://api.example.com/accounts/?page=2",
    "results": [
        {
            "username": "alice",
            "age": 28
        },
        {
            "username": "bob",
            "age": 36
        }
    ]
}

在上述示例中,我们有一个分页器,每页显示 2 个项目。我们有 100 个项目,因此有 50 页。在此示例中,我们当前查看第三页,并且可访问前一页和后一页。next 字段包含指向下一页的 URL,previous 字段包含指向前一页的 URL。results 包含当前页面的条目列表。请注意,第一页没有“previous”字段,最后一页没有“next”字段。