如何解决在 Django Rest Framework 中使用 viewsets.ViewSet 进行 LimitOffsetPagination
我们可以在 Django Rest Framework 中将 LimitOffsetPagination 与 views.ViewSet 一起使用吗。
settings.py:
REST_FRAMEWORK = {
"DEFAULT_AUTHENTICATION_CLASSES": [
"rest_framework.authentication.TokenAuthentication",],"DEFAULT_PERMISSION_CLASSES": [
"rest_framework.permissions.IsAuthenticated","DEFAULT_PAGINATION_CLASS": "rest_framework.pagination.LimitOffsetPagination","PAGE_SIZE": 100,}
以下是我的列表视图的外观:
class UserViewSet(viewsets.ViewSet):
pagination_class = LimitOffsetPagination
def get_permissions(self):
"""
Instantiates and returns the list of permissions that this view requires.
"""
permission_classes = [IsAuthenticated]
if self.action == "list" or self.action == "retrieve":
permission_classes.append(UserReadPermission)
elif self.action == "create" or self.action == "update":
permission_classes.append(UserWritePermission)
elif self.action == "destroy":
permission_classes.append(UserDeletePermission)
return [permission() for permission in permission_classes]
def list(self,request):
serializer = UserIndexSerializer(data=request.query_params)
if serializer.is_valid():
users = User.objects.all()
serializer = UserGetSerializer(users,many=True)
response = {"users": serializer.data,"total": len(serializer.data)}
return AppResponse.success("User list found.",response)
return AppResponse.error(serializer.errors,None,http_error_code=400)
def create(self,request):
pass
def retrieve(self,request,pk=None):
pass
def update(self,pk=None):
pass
def partial_update(self,pk=None):
pass
def destroy(self,pk=None):
pass
解决方法
您可以使用 settings.py 中的以下代码为整个应用程序使用 django-rest 默认分页样式
REST_FRAMEWORK = {
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.LimitOffsetPagination','PAGE_SIZE': 50 }
如果您需要每个视图的分页,您可以按照文档进行分页
class StandardResultsSetPagination(PageNumberPagination):
page_size = 100
page_size_query_param = 'page_size'
max_page_size = 1000
然后在您的视图中使用它
class viewclass(APIView):
queryset = customquery
serializer_class = serializerclass
pagination_class = LargeResultsSetPagination
使用参数也可以帮助像
GET https://api.example.org/accounts/?limit=100&offset=400
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。