在Django REST Framework中限制每页的项目

时间:2013-07-12 20:39:43

标签: django api rest django-rest-framework

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

Jarus

4 个答案:

答案 0 :(得分:5)

您需要将PAGINATE_BY设置为doc州:

  

PAGINATE_BY :用于分页的默认页面大小。如果设置为   无,默认情况下禁用分页

PAGINATE_BY_PARAM供用户覆盖默认大小。所以,如果你害怕它的滥用,就不要启用它。

  

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

答案 1 :(得分:5)

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

答案 2 :(得分:3)

最好通过Pagination

PageNumberPagination类包含一些attributes,可以重写以修改分页样式。

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

pagination_class = ItemSetPagination

答案 3 :(得分:2)

设置'MAX_PAGINATE_BY'以配置每页的全局最大结果,为doc个状态。

doc的示例:

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以在每个视图的基础上配置每页的硬性最大限制。

doc:

中的示例
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