DRFページング成分
なぜ使用のページング
私たちは、特定のテーブルのすべてのデータへのアクセス権を持っている場合、すべてのデータが表示されたら、テーブル内の我々のデータは、データの断片の数千を持っていることが、我々は、必要性にはほとんどありませんので、サービス側のデータメモリ圧力の大量大規模なネットワークの伝送時間のかかるプロセスが比較的大きくなりますがあります。
通常、私たちは要求されたデータの一部に行きたいと思う、である、私たちはしばしばページからページにデータを取得し、表示されていると言います。
使用ページャにDRF
ページングモード
残りのフレームワークは、3ページモードが用意されています。
rest_framework.paginationの輸入 PageNumberPagination、LimitOffsetPagination、CursorPagination
グローバルコンフィギュレーション
REST_FRAMEWORK = { ' DEFAULT_PAGINATION_CLASS ':' rest_framework.pagination.LimitOffsetPagination ' 、 ' PAGE_SIZE ':100 }
ローカル設定
私たちの一部は、ビュークラスに配置されたことができます
クラスPublisherViewSet(ModelViewSet): クエリセット = models.Publisher.objects.all() serializer_class = PublisherModelSerializer pagination_class = PageNumberPagination #リストより注意(1ページのみモード)
DRFは、内蔵のページャ
PageNumberPagination
ページ番号、ページn、ページごとにm個のデータによるページ
たとえば、次のhttp://127.0.0.1:8000 / API /記事/ページ= 2&サイズ= 1?
ページャ
クラスMyPageNumber(PageNumberPagination): PAGE_SIZE = 2 #どのように多くのページあたり page_size_query_param = 「サイズ」 #のページ番号のバーショーのURLのパラメータ page_query_param = 「ページ」 #のURLパラメータページで MAX_PAGE_SIZE =なし #の上限ページ数
ビュー
クラスArticleList(APIView): デフを取得(自己、要求、* argsを、** kwargsから): RES = { " コード" :0} article_list = models.Article.objects.all()。ORDER_BY(" ID " ) #分页 page_obj = MyPageNumber() page_article = page_obj.paginate_queryset(=クエリセット= article_list、要求=要求、ビュー自己) ser_obj = ArticleSerializer(page_article、多くの= 真) RES [ " データ" ] = ser_obj.data リターン応答(RES)
ページ番号のリンクを持つ応答を返します。
クラスArticleList(APIView): デフを取得(自己、要求、* argsを、** kwargsから): RES = { " コード" :0} article_list = models.Article.objects.all()。ORDER_BY(" ID " ) #分页 page_obj = MyPageNumber() page_article = page_obj.paginate_queryset(=クエリセット= article_list、要求=要求、ビュー自己) ser_obj = ArticleSerializer(page_article、多くの= 真) RES [ " データ" ] = ser_obj.data 戻り page_obj.get_paginated_response(RES)
LimitOffsetPagination
位置N、Mデータ背面図でタブ
たとえば、次のhttp://127.0.0.1:8000 / API /記事/オフセット= 2&リミット= 2?
ページャ
#オフセットページネーション クラスMyLimitOffset(LimitOffsetPagination): default_limit = 1 limit_query_param = ' 限界' offset_query_param = ' オフセット' max_limit = 999
ビュー
クラスArticleList(APIView): デフを取得(自己、要求、* argsを、** kwargsから): RES = { " コード" :0} article_list = models.Article.objects.all()。ORDER_BY(" ID " ) #分页 page_obj = MyLimitOffset() page_article = page_obj.paginate_queryset(=クエリセット= article_list、要求=要求、ビュー自己) ser_obj = ArticleSerializer(page_article、多くの= 真) RES [ " データ" ] = ser_obj.data 戻り page_obj.get_paginated_response(RES)
CursorPagination
[暗号化]タブ、前回と次のid値を覚えておいてください
ページャ
#暗号化ページング クラスMyCursorPagination(CursorPagination): cursor_query_param = 「カーソル」 PAGE_SIZE = 1つの 順序 = 「-id 」 #書き換え可能なフィールドをソートします
ビュー
クラスArticleList(APIView): デフを取得(自己、要求、* argsを、** kwargsから): RES = { " コード" :0} article_list = models.Article.objects.all()。ORDER_BY(" ID " ) #分页 page_obj = MyCursorPagination() page_article = page_obj.paginate_queryset(=クエリセット= article_list、要求=要求、ビュー自己) ser_obj = ArticleSerializer(page_article、多くの= 真) RES [ " データ" ] = ser_obj.data #リターン応答(RES) リターン page_obj.get_paginated_response(RES)