9

在 Django REST Framework 中限制每页项目的最佳方法是什么?我设置 PAGINATE_BY = 20 和 PAGINATE_BY_PARAM。如果没有参数,您将获得 20 个项目,但也可以通过 paginate 参数获得 4000 个项目。这个请求非常繁重,不是很有用,但对于脚本小子来说是完美的。

雅鲁斯

4

4 回答 4

6

如果您想设置硬性最大限制,请查看在get_paginate_by通用视图上覆盖该方法。

于 2013-07-14T09:52:53.617 回答
5

您需要设置PAGINATE_BY文档状态:

PAGINATE_BY:用于分页的默认页面大小。如果设置为 None,则默认禁用分页

PAGINATE_BY_PARAM是让用户覆盖默认大小。因此,如果您害怕它的滥用,请不要启用它。

PAGINATE_BY_PARAM:查询参数的名称,客户端可以使用它来覆盖用于分页的默认页面大小。如果设置为无,客户端可能不会覆盖默认页面大小。

于 2013-07-12T20:58:07.953 回答
3

最好通过分页

该类PageNumberPagination包括许多attributes可以被覆盖以修改分页样式的内容。

class ItemSetPagination(PageNumberPagination):
     page_size = 1000
     page_size_query_param = 'page_size'
     max_page_size = 10000

pagination_class = ItemSetPagination
于 2016-06-17T11:27:47.480 回答
2

如文档所述,设置'MAX_PAGINATE_BY'为配置每页的全局最大结果。

文档中的示例:

REST_FRAMEWORK = {
    'PAGINATE_BY': 10,                 # Default to 10
    'PAGINATE_BY_PARAM': 'page_size',  # Allow client to override, using `?page_size=xxx`.
    'MAX_PAGINATE_BY': 100             # Maximum limit allowed when using `?page_size=xxx`.
}

设置max_paginate_by为在每次查看的基础上配置每页的硬性最大限制。

文档中的示例:

class PaginatedListView(ListAPIView):
    queryset = ExampleModel.objects.all()
    serializer_class = ExampleModelSerializer
    paginate_by = 10
    paginate_by_param = 'page_size'
    # Set MAX results per page
    max_paginate_by = 100
于 2014-04-08T17:44:09.600 回答