中间复合使用示例

让我们假设我们有一个复杂的 api,有许多通用视图和一些通用视图集。我们希望为每个视图启用 PageNumberPagination,除了一个(通用视图或视图集,没有区别)我们想要一个 LimitOffsetPagination 的自定义情况。

要实现这一目标,我们需要:

  1. settings.py 上,我们将放置默认分页,以便为每个通用视图/视图集启用它,我们将 PAGE_SIZE 设置为 50 个项目:

    REST_FRAMEWORK = {
        'DEFAULT_PAGINATION_CLASS': 
            'rest_framework.pagination.PageNumberPagination',
        'PAGE_SIZE': 50
    }
    
  2. 现在在我们的 views.py(或另一个 .py ex:paginations.py)中,我们需要覆盖 LimitOffsetPagination

    from rest_framework.pagination import LimitOffsetPagination
    
    class MyOffsetPagination(LimitOffsetPagination):
        default_limit = 20
        max_limit = 1000
    

    定制的 LimitOffsetPagination,包含 20 件商品,最多包含 1000 件商品。

  3. 在我们的 views.py 中,我们需要定义我们特殊视图的 pagination_class

    imports ...
    
    # ===================================
    #    PageNumberPagination classes
    # ===================================
    
    class FirstView(generics.ListAPIView):
        ...
    
    class FirstViewSet(viewsets.GenericViewSet):
        ...
    
    ...
    
    # ===================================
    #     Our custom Pagination class
    # ===================================
    
    class IAmSpecialView(generics.ListAPIView):
        pagination_class = MyOffsetPagination
        ...
    

现在应用程序中的每个通用视图/视图集都有 PageNumberPagination,除了 IAmSpecial 类,这确实是*特殊的,*并且有自己定制的 LimitOffsetPagination