1 2 3 4

drf分页器

1 分页器

# 查所有,才需要分页
from rest_framework.generics import ListAPIView
# 内置三种分页方式
from rest_framework.pagination import PageNumberPagination, LimitOffsetPagination, CursorPagination

'''
PageNumberPagination
    page_size:每页显示的条数
'''


class MyPageNumberPagination(PageNumberPagination):
    # http://127.0.0.1:8000/api/books2/?aaa=1&size=6
    page_size = 3  # 每页条数
    page_query_param = 'aaa'  # 查询第几页的key(url中)
    page_size_query_param = 'size'  # 每一页显示的条数
    max_page_size = 5


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


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


class BookPaginationView(ListAPIView):
    queryset = models.Book.objects.all()
    serializer_class = BookModelSerializer
    # 配置分页
    # pagination_class = MyPageNumberPagination
    # pagination_class = MyLimitOffsetPagination
    pagination_class = MyCursorPagination
    
# 如果使用APIView分页
from utils.throttling import MyThrottle


class BookPaginationAPIView(APIView):
    # 局部配置
    # throttle_classes = [MyThrottle,]

    def get(self, request, *args, **kwargs):
        book_list = models.Book.objects.all()
        # 实例化得到一个分页器对象
        page_obj = MyPageNumberPagination()
        book_list = page_obj.paginate_queryset(book_list, request, view=self)
        nex_url = page_obj.get_next_link()
        pr_url = page_obj.get_previous_link()
        print(nex_url)
        print(pr_url)
        book_ser = BookModelSerializer(book_list, many=True)
        return Response(data=book_ser.data)

#settings.py
REST_FRAMEWORK={
    'PAGE_SIZE': 2,
}
posted @ 2020-07-15 15:02  臭弟弟d  阅读(126)  评论(0编辑  收藏  举报