数据库有几千万条数据,这些数据须要展现,不可能直接从数据库把数据所有读取出来,数据库
这样会给内存形成特别大的压力,有可能还会内存溢出,因此但愿一点一点的取,那展现的时候也是同样的,老是要进行分页显示,加密
DRF给提供了三种分页方式,看下他们都是什么样的~~url
分页组件的使用spa
DRF提供的三种分页rest
全局配置 REST_FRAMEWORK = { 'PAGE_SIZE': 2 }
http://127.0.0.1:8000/book?page=2&size=1code
utils/pagination.py对象
自定义分页类blog
from rest_framework.pagination import PageNumberPagination, LimitOffsetPagination, CursorPagination class MyPagination(PageNumberPagination): # xxxx?page=1&size=2 page_size = 1 page_query_param = "page" page_size_query_param = "size" max_page_size = 3
pageDemo/views.py排序
from utils.pagination import MyPagination class BookView(APIView): def get(self, request): queryset = Book.objects.all() # 1,实例化分页器对象 page_obj = MyPagination() # 2,调用分页方法去分页queryset page_queryset = page_obj.paginate_queryset(queryset, request, view=self) # 3,把分页好的数据序列化返回
ser_obj = BookSerializer(page_queryset, many=True) # 4, 带着上一页下一页链接的响应,返回带超连接 需返回的时候用内置的响应方法 return page_obj.get_paginated_response(ser_obj.data) #超连接
# return Response(ret.data)
自定义分页类内存
class MyPagination(LimitOffsetPagination): default_limit = 1 limit_query_param = "limit" # 向后找多少条 offset_query_param = "offset" # 从第几个开始找 max_limit = 3
视图
# 视图和上面的大致一致 # 只有用的分页类不一样,其余都相同 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)
加密游标的分页 把上一页和下一页的id记住
自定义分页类
class MyPagination(CursorPagination): cursor_query_param = "cursor" page_size = 2 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)
对url进行了加密,还支持对数据排序
7