目的
记录如何实现DRF获取数据并实现分页
代码
settings设置
REST_FRAMEWORK = {
"PAGE_SIZE": 2, # 每页多少数据 方法一二三设置每页的
"DEFAULT_PAGINATION_CLASS": "res_framework.pagination.PageNumberPagination" # 补充方法
}
# 当以上两个关键词同时写 就会帮我们自动分页
# 只写一个 就参考方法 123
或者通过继承
class MyPageNumberPagination(PageNumberPagination):
page_size = 2
class HulaLimitOffsetPagination(LimitOffsetPagination):
max_limit = 5 # 最多取多少个
序列化代码
class PageNumberPaginationSerializer(serializers.ModelSerializer): # 方法1234
class Meta:
model = models.Article
fields = '__all__'
class PageViewArticleSerializer(serializers.ModelSerializer): # 补充的
class Meta:
model = models.Article
fields = '__all__'
接口代码
class PageArticleView(APIView):
def get(self, request, *args, **kwargs):
queryset = models.Article.objects.all()
# 方式1 仅数据 http://127.0.0.1:8000/page/article/?page=5
"""
page_object = MyPageNumberPagination()
result = page_object.paginate_queryset(queryset, request, self)
ser = serializer.PageNumberPaginationSerializer(instance=result, many=True)
return Response(ser.data)
"""
# 方法2 数据加分页信息
"""
page_object = MyPageNumberPagination()
result = page_object.paginate_queryset(queryset, request, self)
ser = serializer.PageNumberPaginationSerializer(instance=result, many=True)
return page_object.get_paginated_response(ser.data)
"""
# 方法三 数据+部分分页信息
"""
page_object = MyPageNumberPagination()
result = page_object.paginate_queryset(queryset, request, self)
ser = serializer.PageNumberPaginationSerializer(instance=result, many=True)
return Response({
'count': page_object.page.paginator.count,
'result': ser.data
})
"""
# 4 从第几条数据后拿几条 http://127.0.0.1:8000/page/article/?offset=0&limit=5 offset以2序
page_object = HulaLimitOffsetPagination()
result = page_object.paginate_queryset(queryset, request, self)
ser = serializer.PageNumberPaginationSerializer(instance=result, many=True)
return Response(ser.data)
补充分页
class PageViewArticleView(ListAPIView):
# http://127.0.0.1:8000/page/view/article/?page=5
queryset = models.Article.objects.all()
serializer_class = serializer.PageViewArticleSerializer