标签:data efault 位置 ati man off work 排列 object
作用:数据库有几千万条数据,这些数据需要展示,我们不可能直接从数据库把数据全部读取出来,这样会给内存造成特别大的压力,有可能还会内存溢出,所以我们希望一点一点的取,那展示的时候也是一样的,总是要进行分页显示,我们之前自己都写过分页。
在数据量特别大的时候,我们的分页会越往后读取速度越慢,
当有一千万条数据,我要看最后一页的内容的时候,怎么能让我的查询速度变快。
DRF提供的三种分页方式
from rest_framework.pagination import PageNumberPagination, LimitOffsetPagination, CursorPagination
全局配置
REST_FRAMEWORK = {
'PAGE_SIZE': 2
}
class MyPageNumber(PageNumberPagination):
page_size = 2 # 每页显示多少条
page_size_query_param = 'size' # URL中每页显示条数的参数
page_query_param = 'page' # URL中页码的参数
max_page_size = None # 最大页码数限制
view视图
class BookView(APIView):
def get(self, request):
book_list = Book.objects.all()
# 分页
page_obj = MyPageNumber()
page_article = page_obj.paginate_queryset(queryset=book_list, request=request, view=self)
ret = BookSerializer(page_article, many=True)
return Response(ret.data)
# 返回带超链接 需返回的时候用内置的响应方法
# return page_obj.get_paginated_response(ret.data)
定义类
class MyLimitOffset(LimitOffsetPagination):
# 默认每页显示的数据条数
default_limit = 10
# URL中传入的显示数据条数的参数
limit_query_param = 'limit'
# URL中传入的数据位置的参数
offset_query_param = 'offset'
# 最大每页显得条数
max_limit = None
视图
# 视图和上面的大体一致
# 只有用的分页类不同,其他都相同
class BookView(APIView):
def get(self, request):
book_list = Book.objects.all()
# 分页
page_obj = MyLimitOffset()
page_article = page_obj.paginate_queryset(queryset=book_list, request=request, view=self)
ret = BookSerializer(page_article, many=True)
# return Response(ret.data)
# 返回带超链接 需返回的时候用内置的响应方法
return page_obj.get_paginated_response(ret.data)
定义类
class MyCursorPagination(CursorPagination):
# URL传入的游标参数
cursor_query_param = 'cursor'
# 默认每页显示的数据条数
page_size = 2
# URL传入的每页显示条数的参数
page_size_query_param = 'page_size'
# 每页显示数据最大条数
max_page_size = 1000
# 根据ID从大到小排列
ordering = "id"
视图
class BookView(APIView):
def get(self, request):
book_list = Book.objects.all()
# 实例化分页对象,获取数据库中的分页数据
page_obj = MyCursorPagination()
page_article = page_obj.paginate_queryset(queryset=book_list, request=request, view=self)
# 序列化对象
ret = BookSerializer(page_article, many=True)
return Response(ret.data)
# 生成分页和数据
# 返回带超链接 需返回的时候用内置的响应方法
# return page_obj.get_paginated_response(ret.data)
标签:data efault 位置 ati man off work 排列 object
原文地址:https://www.cnblogs.com/yuncong/p/10129013.html