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