DRF - 分页(访问第 n 页,每页显示 m 条数据)
settings.py 中设置每页的大小
REST_FRAMEWORK = {
"PAGE_SIZE": 2, # 每页显示 2 条内容
}
view.py:
from rest_framework import serializers
from rest_framework.pagination import PageNumberPagination
from rest_framework.response import Response
from drf import models
class PagerSerializer(serializers.ModelSerializer):
class Meta:
model = models.Role
fields = "__all__"
class PagerView(APIView):
def get(self, request, *args, **kwargs):
# 获取 Role 表中的所有数据
role_obj = models.Role.objects.all()
# 创建分页对象
page_obj = PageNumberPagination()
# 将从数据库中获取的数据进行分页
role_page = page_obj.paginate_queryset(
queryset=role_obj,
request=request,
view=self,
)
# 对数据序列化
ser = PagerSerializer(instance=role_page, many=True)
return Response(ser.data)
运行结果:

默认的页号参数为 page
设置更多的参数:
from rest_framework import serializers
from rest_framework.pagination import PageNumberPagination
from rest_framework.response import Response
from drf import models
# 设置参数
class MyPagination(PageNumberPagination):
page_size = 2 # 每页的数量
page_size_query_param = "size" # 每页数量的参数
max_page_size = 5 # 每页最多的数量
page_query_param = "page" # 页号的参数
class PagerSerializer(serializers.ModelSerializer):
class Meta:
model = models.Role
fields = "__all__"
class PagerView(APIView):
def get(self, request, *args, **kwargs):
# 获取 Role 表中的所有数据
role_obj = models.Role.objects.all()
# 创建分页对象
page_obj = MyPagination()
# 将从数据库中获取的数据进行分页
role_page = page_obj.paginate_queryset(
queryset=role_obj,
request=request,
view=self,
)
# 对数据序列化
ser = PagerSerializer(instance=role_page, many=True)
# 使用 rest framework 的 Response 进行返回
return Response(ser.data)
访问:

可以在最后用 page 的 response 进行返回
# 使用 rest framework 的 Response 进行返回 # return Response(ser.data) # 使用分页的 response 进行返回 return page_obj.get_paginated_response(ser.data)
运行结果:

显示了数据总数、前一页和后一页的 url

浙公网安备 33010602011771号