Django REST:JSON响应中没有分页块(PageNumberPagination)
对于我的API,我使用的是API_视图装饰器。分页问题(JSON响应)。我得到了没有“分页块”的响应: 我还试图覆盖默认的PageNumberPagination,它可以工作,但仍然没有“分页块” 我的api视图(查看GET-example>else): My settings.py:Django REST:JSON响应中没有分页块(PageNumberPagination),django,python-3.x,pagination,django-rest-framework,Django,Python 3.x,Pagination,Django Rest Framework,对于我的API,我使用的是API_视图装饰器。分页问题(JSON响应)。我得到了没有“分页块”的响应: 我还试图覆盖默认的PageNumberPagination,它可以工作,但仍然没有“分页块” 我的api视图(查看GET-example>else): My settings.py: REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': ( 'rest_framework_jwt.authentication.JSONWebTok
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework_jwt.authentication.JSONWebTokenAuthentication',),
'DEFAULT_PERMISSION_CLASSES': ['rest_framework.permissions.AllowAny',],
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
'PAGE_SIZE': 2
}
预期结果:
{
"count": 1023
"next": "https://api.example.org/accounts/?page=5",
"previous": "https://api.example.org/accounts/?page=3",
"results": [
…
]
}
您需要调用
get\u paginated\u response()
方法
@csrf_exempt
@api_view(['GET', 'POST', ])
@permission_classes([AllowAny, ])
def product(request):
item = request.data
if request.method == 'POST':
serializer = ProductSerializer(data=item)
serializer.is_valid(raise_exception=True)
serializer.save()
return Response({"message": "Product created!", "data": request.data}, status=status.HTTP_201_CREATED)
else:
all_obj = Product.objects.filter(available=True)
paginator = PageNumberPagination()
result_page = paginator.paginate_queryset(all_obj, request)
if result_page is not None:
serializer = ProductSerializer(result_page, many=True)
return paginator.get_paginated_response(serializer.data)
else:
serializer = ProductSerializer(all_obj, many=True)
return Response(serializer.data, status=status.HTTP_200_OK)
@csrf\u豁免
@api_视图(['GET','POST',])
@权限\u类([AllowAny,])
def产品(请求):
item=request.data
如果request.method==“POST”:
序列化程序=产品序列化程序(数据=项)
serializer.is\u有效(raise\u exception=True)
serializer.save()
返回响应({“消息”:“产品已创建!”,“数据”:request.data},status=status.HTTP_201_已创建)
其他:
all_obj=Product.objects.filter(available=True)
paginator=PageNumberPagination()
结果页面=分页器。分页查询集(所有对象,请求)
如果结果页面不是无:
serializer=ProductSerializer(结果\页面,多个=真)
返回paginator.get_paginated_响应(serializer.data)
其他:
serializer=ProductSerializer(all_obj,many=True)
返回响应(serializer.data,status=status.HTTP\u 200\u OK)
注意不要调用len(queryset)
,这将导致N
数据库连接数。改用count()
方法
{
"count": 1023
"next": "https://api.example.org/accounts/?page=5",
"previous": "https://api.example.org/accounts/?page=3",
"results": [
…
]
}
@csrf_exempt
@api_view(['GET', 'POST', ])
@permission_classes([AllowAny, ])
def product(request):
item = request.data
if request.method == 'POST':
serializer = ProductSerializer(data=item)
serializer.is_valid(raise_exception=True)
serializer.save()
return Response({"message": "Product created!", "data": request.data}, status=status.HTTP_201_CREATED)
else:
all_obj = Product.objects.filter(available=True)
paginator = PageNumberPagination()
result_page = paginator.paginate_queryset(all_obj, request)
if result_page is not None:
serializer = ProductSerializer(result_page, many=True)
return paginator.get_paginated_response(serializer.data)
else:
serializer = ProductSerializer(all_obj, many=True)
return Response(serializer.data, status=status.HTTP_200_OK)