ディレクトリ
オリジナル:http://106.13.73.98/__/68/
当社のデータベースはデータの数千万人が、これらのデータは、我々は。データベースから直接読み取られるすべてのデータを置くことができないことを示す必要があり
、このメモリは、巨大な圧力を及ぼすことになるので、メモリから抜け出すのは簡単ですので、我々は一対一を願っていますポイントが取ら。
ショーが同じである場合も同様に、我々は間違いなく、データ・ページの表示を持っています。
この記事では、改ページDRFの詳細を提供してくれるの三種類を説明しています。
グローバルコンフィギュレーション
REST_FRAMEWORK = { # 对所有分页器生效,但优先级低 'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination', # 指定分页类(源码setting.py配置文件中的此配置为None) 'PAGE_SIZE': 5, # 每页显示5条数据 }
@
***
テストページングとデータのシリアル化クラスの準備ができてみましょう
。
データシートfrom django.db import models class Test(models.Model): """用于测试分页的数据表""" name = models.CharField(max_length=64)
テーブルのレコードを作成します。
# 在Python脚本中调用Django环境 import os if __name__ == '__main__': # 将下面的'blog095.settings'改为项目对应的名称后直接执行即可生成记录 os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'blog095.settings') import django django.setup() from blog.models import Test # 导入数据表 [Test.objects.create(name="花千骨%s" % str(i)) for i in range(100)]
あなたがこれを理解していない場合、我々は文献を見ることができます[ PythonスクリプトでDjangoの環境を呼び出す]
・
シリアライゼーションクラスfrom rest_framework.serializers import ModelSerializer from blog.models import Test # 导入数据表 class TestSerializer(ModelSerializer): """用于测试分页的序列化类""" class Meta: model = Test fields = '__all__'
最初のチェックPageNumberPaginationのページn、n個のページのデータを表示
最初のステップページャの設定ファイル
from rest_framework import pagination class PageNumberPagination(pagination.PageNumberPagination): """查第n页,每页显示n条数据""" page_size = 10 # 指定每页显示多少条数据 page_size_query_param = 'size' # URL参数中每页显示条数的参数 page_query_param = 'page' # URL中页码的参数 max_page_size = None # 每页最多显示多少条数据
第二段階のビューファイル
from rest_framework.response import Response from rest_framework.views import APIView from rest_framework.serializers import ModelSerializer from blog.models import Test # 导入数据表 from blog import pagination # 导入上面的分页配置 class Test01View(APIView): def get(self, request): queryset = Test.objects.all() # 1. 实例化分页器对象 page_obj = pagination.PageNumberPagination() # 2. 使用自己配置的分页器调用分页方法进行分页 page_data = page_obj.paginate_queryset(queryset, request) # 3. 序列化我们分页好的数据 ser_obj = TestSerializer(page_data, many=True) # # 4. 返回数据 # return Response(ser_obj.data) # 4. 返回带上一页/下一页连接的页面 return page_obj.get_paginated_response(ser_obj.data)
第3のステップは、テストアクセスすることにある
指定されたページ= 10&サイズ= 5、対応するデータを返した後に上記図示し、。
***
n番目にLimitOffsetPagination第二の位置、n個のデータのバックチェック
最初のステップページャの設定ファイル
from rest_framework import pagination class LimitOffsetPagination(pagination.LimitOffsetPagination): """在第n个位置,向后查n条数据""" default_limit = 1 # 指定默认查多少条数据 limit_query_param = 'limit' # URL中指定查多少条数据的参数 offset_query_param = 'offset' # URL中指定从第几条数据开始查的参数 max_limit = 999 # 最大显示多少条数据
第二段階のビューファイル
from rest_framework.response import Response from rest_framework.views import APIView from rest_framework.serializers import ModelSerializer from blog.models import Test # 导入数据表 from blog.pagination import LimitOffsetPagination # 导入上面的分页配置 class Test02View(APIView): def get(self, request): queryset = Test.objects.all() # 1. 实例化分页器对象 page_obj = LimitOffsetPagination() # 2. 使用自己配置的分页器调用分页方法进行分页 page_data = page_obj.paginate_queryset(queryset, request) # 3. 序列化我们分页好的数据 ser_obj = TestSerializer(page_data, many=True) # # 4. 返回数据 # return Response(ser_obj.data) # 4. 返回带上一页/下一页连接的页面 return page_obj.get_paginated_response(ser_obj.data)
第3のステップは、テストにアクセスすることである
。***
第三暗号CursorPaginationカーソル]タブ
最初のステップページャの設定ファイル
from rest_framework import pagination class CursorPagination(pagination.CursorPagination): """加密游标的分页""" cursor_query_param = 'cursor' # 游标(这是加密的游标) # ordering = '-id' # 从后往前取数据 ordering = 'id' page_size = 1 # 每页显示的条数
第二段階のビューファイル
from rest_framework.response import Response from rest_framework.views import APIView from rest_framework.serializers import ModelSerializer from blog.models import Test # 导入数据表 from blog.pagination import CursorPagination # 导入上面的分页配置 class Test03View(APIView): def get(self, request): queryset = Test.objects.all() # 1. 实例化分页器对象 page_obj = CursorPagination() # 2. 使用自己配置的分页器调用分页方法进行分页 page_data = page_obj.paginate_queryset(queryset, request) # 3. 序列化我们分页好的数据 ser_obj = TestSerializer(page_data, many=True) # # 4. 返回数据 # return Response(ser_obj.data) # 4. 返回带上一页/下一页连接的页面 return page_obj.get_paginated_response(ser_obj.data)
まあ、それをテストするには、ブラウザを開きます。
DRFビューシステムはまた、次/前ボタンでページを生成するために使用することができます。
from rest_framework.viewsets import ModelViewSet class Test04View(ModelViewSet): queryset = Test.objects.all() serializer_class = TestSerializer pagination_class = CursorPagination # 指定分页配置器
図は次のとおりです。
OKです。