中間複合使用示例

讓我們假設我們有一個複雜的 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