您的当前位置:首页正文

DRF-分页

2024-12-03 来源:个人技术集锦

可以使用DEFAULT_PAGINATION_CLASSPAGE_SIZE设置键全局设置分页样式。例如,要使用内置的限制/偏移分页,您可以执行以下操作:

REST_FRAMEWORK ={
    'DEFAULT_PAGINATION_CLASS':'rest_framework.pagination.LimitOffsetPagination',
    'PAGE_SIZE':100
}

请注意,您需要设置分页类和应使用的页面大小。默认情况下,两者都是DEFAULT_PAGINATION_CLASS和。PAGE_SIZE``None

您还可以使用该pagination_class属性在单个视图上设置分页类。通常,您会希望在整个 API 中使用相同的分页样式,尽管您可能希望在每次查看的基础上改变分页的各个方面,例如默认或最大页面大小。

如果要修改分页样式的特定方面,则需要覆盖其中一个分页类,并设置要更改的属性。

classLargeResultsSetPagination(PageNumberPagination):
    page_size =1000
    page_size_query_param ='page_size'
    max_page_size =10000

classStandardResultsSetPagination(PageNumberPagination):
    page_size =100
    page_size_query_param ='page_size'
    max_page_size =1000

pagination_class然后,您可以使用属性将新样式应用于视图:

classBillingRecordsView(generics.ListAPIView):
    queryset =Billing.objects.all()
    serializer_class =BillingRecordsSerializer
    pagination_class =LargeResultsSetPagination

或者使用DEFAULT_PAGINATION_CLASS设置键全局应用样式。例如:

REST_FRAMEWORK ={
    'DEFAULT_PAGINATION_CLASS':'apps.core.pagination.StandardResultsSetPagination'
}

这种分页样式在请求查询参数中接受单个数字页码。

要求

GET https://api.example.org/accounts/?page=4

回应

HTTP 200 OK
{
    "count":1023,
    "next":"https://api.example.org/accounts/?page=5",
    "previous":"https://api.example.org/accounts/?page=3",
    "results":[
       …
    ]
}

基础设置

from rest_framework.pagination import PageNumberPagination

class PagePagination(PageNumberPagination):
    '''
    列表自定义分页
    '''
    # 默认每页显示的个数
    page_size = 5
    # 可以动态改变每页显示的个数
    # 页码参数 http://127.0.0.1:8000/goods/?page=2&page_size=30
    page_size_query_param = 'page_size'
    # 页码参数
    page_query_param = 'page'
    # 最多能显示多少页
    max_page_size = 20

    ...

    pagination_class =PagePagination
显示全文