REST 框架包括对可自定义分页样式的支持。这允许您修改将大型结果集拆分为各个数据页的方式。
分页 API 可以支持以下任一功能:
内置样式目前都使用作为响应内容的一部分包含的链接。使用可浏览 API 时,此样式更易于访问。
仅当您使用通用视图或视图集时,才会自动执行分页。如果您使用的是常规 ,则需要自己调用分页 API,以确保返回分页响应。有关示例,请参阅 和 类的源代码。
可以通过将分页类设置为 来关闭分页。
REST_FRAMEWORK = {
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.LimitOffsetPagination',
'PAGE_SIZE': 100
}
请注意,您需要设置分页类和应使用的页面大小。默认情况下,两者都是 。
您还可以使用该属性在单个视图上设置分页类。通常,您需要在整个 API 中使用相同的分页样式,但您可能希望根据每个视图改变分页的各个方面,例如默认或最大页面大小。
若要设置这些属性,应重写该类,然后启用自定义分页类,如上所述。PageNumberPagination
若要设置这些属性,应重写该类,然后启用自定义分页类,如上所述。LimitOffsetPagination
若要设置这些属性,应重写该类,然后启用自定义分页类,如上所述。CursorPagination
自定义分页
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
自定义分页返回格式
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
})
class BillingRecordsView(generics.ListAPIView):
queryset = Billing.objects.all()
serializer_class = BillingRecordsSerializer
pagination_class = LargeResultsSetPagination
REST_FRAMEWORK = {
'DEFAULT_PAGINATION_CLASS': 'apps.core.pagination.StandardResultsSetPagination'
}
下图为基本使用案例:
PageNumberPagination使用
LimitOffsetPagination使用