day77_10_24ページャ

A. オフセットページャ。

  ページャのオフセットでは、制限はワンタイム表示の数を表し、そして彼は、シフト量の先頭に基づくオフセットによって表されます。

rest_framework.pagination インポートLimitOffsetPaginationの
 クラスMyLimitOffsetPagination(LimitOffsetPagination): #
     オフセット=&=の数を表示するために先頭からのオフセットの数を制限する 
    limit_query_param = リミット
    offset_query_paramは = オフセット
    ?、トップ3を相殺してリミットデフォルトを渡しません項目のみ再度3表示ずれた位置から後退しているオフセット 
    default_limitを3 = ?制限は最大数の表示をカスタマイズすることができる 
    max_limitを5 = 唯一の制限の順序、数または数の事前ランクに関連して実施されてもよい?= -価格&リミット= 2注文 =>を価格2前pahenations.py
    

    
    

  景色

rest_framework.generics インポートListAPIView 

クラスCarListAPIView(ListAPIView):
    フィルタなしの条件をクエリセットしない場合、(.ALLする必要がある)、そうでなければ問題ページングが存在することになる 
    クエリセット= models.Car.objects.all()
    serializer_class = serializers.CarModelSerializer 
    
    ページング成分-クラス]タブにビュークラスに構成された-タブページングクラスはに提供するカスタムクラス継承DRFが必要です 
    pagination_class = pagenations.MyLimitOffsetPaginationを

II。カーソル(暗号化)フィニッシャー。

  ページャを暗号化すると、次の事前に表示されるURL暗号化された暗号化を適用しています。

  ときにそこに発注、ビューの順序でソート順を追加する必要はありませんし、URLフィールドに追加する必要があり、タブアセンブリ。

  それは、フィールドの順序でソートされます。

  pahenations.py

#1 注:必要もページングベースの照合1)インタフェースはOrderingFilterフィルタを設定されている場合は、URLが発注合格しなければなりません
#はフィールドを注文することにより、1)インタフェースが設定されていない場合OrderingFilterフィルタは、ページクラスで宣言する必要がありますデフォルトのソート用
から rest_framework.paginationのインポートCursorPaginationの
 クラス:MyCursorPagination(CursorPagination)
    cursor_query_param = ' カーソル' 
    PAGE_SIZE = 3。
    page_size_query_param = ' PAGE_SIZE ' 
    MAX_PAGE_SIZE = 5。
    順序 = ' -pk '

  views.py

rest_framework.generics インポートListAPIView 

クラスCarListAPIView(ListAPIView):
    フィルタなしの条件をクエリセットしない場合、(.ALLする必要がある)、そうでなければ問題ページングが存在することになる 
    クエリセット= models.Car.objects.all()
    serializer_class = serializers.CarModelSerializer 
    
    ページング成分-クラス]タブにビュークラスに構成された-タブページングクラスはに提供するカスタムクラス継承DRFが必要です 
    pagination_class = pagenations.MyCursorPaginationを

III。カスタムフィルタ。

  まず、前記オーバーライドfilter_querysetの方法であって、前記選択されたクエリセットよ、フィルタとして、クラスを定義する必要があり、そしてクエリセットを返します。

  フィルター

#のカスタムフィルタ、インタフェース:?リミット=バーの数が表示された
クラスLimitFilterを:
     DEF filter_queryset(セルフ、要求、クエリセット、ビュー):
        ?フロント上限を固定= ...フィルタリングパラメータを渡す 
        リミット= request.query_params.get (' 限界' IF リミット:
            リミット = INT(限界)
             を返す[:リミット]クエリセットを
         返すクエリセットを

  景色

rest_framework.generics インポートListAPIView 

クラスCarListAPIView(ListAPIView):
    フィルタなしの条件をクエリセットしない場合、(.ALLする必要がある)、そうでなければ問題ページングが存在することになる 
    クエリセット= models.Car.objects.all()
    serializer_class = serializers.CarModelSerializer 
    
    ローカル構成クラス(グローバルコンフィギュレーションDEFAULT_FILTER_BACKENDSを用いて)濾過し 
    filter_backends = [LimitFilter]

IV。ジャンゴ・フィルタのフィルタ挿入

  インストール:

>:PIP3ジャンゴ・フィルタをインストールします

  レイヤのフィルタ条件:カスタムAPI / filters.py

#のジャンゴ-フィルタ插件过滤器类
から django_filters.rest_framework.filterset インポートフィルタセット
 から輸入モデル

自定义过滤字段
から django_filtersはインポートフィルタ
 クラスCarFilterSet(フィルタセット):
    MIN_PRICE = filters.NumberFilter(FIELD_NAME = ' 価格'、lookup_expr = ' GTE ' 
    MAX_PRICE = filters.NumberFilter(FIELD_NAME = ' 価格'、lookup_expr = " LTE " クラスメタ:
        モデル = models.Car 
        フィールドは [= ブランドMIN_PRICE MAX_PRICEの]
         #のブランドモデルは、フィールドに存在するが、一般的に、パケットフィールドのために使用することができる
        #1 MIN_PRICE、MAX_PRICEのカスタムフィールドが必要とされます独自のカスタムフィルタ

  ビュー層:views.py

Djangoのフィルタプラグフィルタ
から django_filters.rest_framework インポートDjangoFilterBackend
 から .filters インポートCarFilterSetの

クラス:CarListAPIView(ListAPIView)
    クエリセット = models.Car.objects.all()
    serializer_class = serializers.CarModelSerializer 
    
    グローバルコンフィギュレーションを使用して、ローカル構成クラスがフィルタリングされます( DEFAULT_FILTER_BACKENDS) 
    filter_backends = [DjangoFilterBackend] 
    
    Djangoのフィルタフィルタプラグイン使用 
    filter_class = CarFilterSet
     インターフェイス:?ブランド= = ...&...&MIN_PRICE MAX_PRICE = ... 
     例えば:?ブランド= BMW&MIN_PRICE = 5&MAX_PRICE = 10 => BMWブランド車の間に5〜10
    
    

 

おすすめ

転載: www.cnblogs.com/LZXlzmmddtm/p/11735192.html