django rest framework 自定义分页

上回书说到自定义返回内容,通过继承viewsets.ModelViewSet实现,这里面有个问题,在list函数,也就是返回结果列表这个功能里,如果用到了分页,就需要额外的调整来实现自定义返回内容了。

    def list(self, request, *args, **kwargs):
        queryset = self.filter_queryset(self.get_queryset())
        page = self.paginate_queryset(queryset)
        ###########
        if page is not None:
            serializer = self.get_serializer(page, many=True)
            return self.get_paginated_response(serializer.data)
        ###########

        serializer = self.get_serializer(queryset, many=True)
        return Response({'code': 1, 'msg': '成功', 'data': serializer.data})

井号区域内就是分页走的分支,显然不会走到自定义的返回那里。django rest framework模块化程度很高,分页的问题就在分页解决,下面是自定义分页的解决方案。
在应用的文件夹下新建一个core文件夹里面新建一个pagination.py:

from rest_framework.response import Response
from rest_framework.pagination import PageNumberPagination


class CustomPagination(PageNumberPagination):
    def get_paginated_response(self, data):
        return Response({
            'code': 1,
            'msg': '成功',
            'data': {
                'current_page': self.page.number,
                'count': self.page.paginator.count,
                'results': data
            }
        })

在项目的settings里添加rest framework的配置:

REST_FRAMEWORK = {
    'DEFAULT_PAGINATION_CLASS': 'myapp.core.pagination.CustomPagination',
    'PAGE_SIZE': 10,
}

搞定!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值