郑统京 发表于 2022-12-30 00:29:04

Django之drf分页器使用

# 分页器使用
# 查询所有,才需要分页
from rest_framework.generics import ListAPIView
# 内置分页器三种方式
from rest_framework.pagination import PageNumberPagination,LimitOffsetPagination,CursorPagination
'''
PageNumberPagination
    page_size:每页显示的条数
'''
# PageNumberPagination 用的比较多
class MyPageNumberPagination(PageNumberPagination):
    # http://127.0.0.1/api/book2/?aaa=1&size=6
    page_size = 3 # 每页条数
    page_query_param = 'aaa'#查询第几页的key
    page_size_query_param = 'size'# 每一页显示的条数
    max_page_size = 5 # 每页显示最大的条数

# LimitOffsetPagination
class MyLimitOffsetPagination(LimitOffsetPagination):
#   default_limit = 3   # 每页条数
#   limit_query_param = 'limit' # 往后拿几条
#   offset_query_param = 'offset' # 标杆
#   max_limit = 5   # 每页最大几条

# CursorPagination查询效率最高
# class MyCursorPagination(CursorPagination):
#   cursor_query_param = 'cursor'# 每一页查询的key
#   page_size = 2   #每页显示的条数
#   ordering = '-id'#排序字段

class BookView(ListAPIView):
    queryset = models.Book.objects.all()
    serializer_class = BookModelSerializer
    # 配置分页
    pagination_class = MyPageNumberPagination

# 如果使用APIView分页/genericAPIView分页
# from utils.throttling import MyThrottle
# class BookView(APIView):
#   # throttle_classes =
#   def get(self,request,*args,**kwargs):
#         book_list=models.Book.objects.all()
#         # 实例化得到一个分页器对象
#         page_cursor=MyPageNumberPagination()
#
#         book_list=page_cursor.paginate_queryset(book_list,request,view=self)
#         next_url =page_cursor.get_next_link()
#         pr_url=page_cursor.get_previous_link()
#         # print(next_url)
#         # print(pr_url)
#         book_ser=BookModelSerializer(book_list,many=True)
#         return Response(data=book_ser.data)
页: [1]
查看完整版本: Django之drf分页器使用