首页 > Windows开发 > 详细

django,restframework,GenericAPIView重写返回格式

时间:2021-04-04 01:06:12      阅读:49      评论:0      收藏:0      [点我收藏+]

问题

django restframework默认的ListCreateAPIView,返回格式如下,直接返回查询field的查询结果

{
    "id": 1,
    "desc": "Java讨论会Java讨论会",
    "name": "Java讨论会",
}

但是实际开发中需要定制返回结果,如下

{
    "retcode": 200,
    "msg": "查询成功",
    "retlist": [
        {
            "id": 1,
            "desc": "Java讨论会Java讨论会",
            "name": "Java讨论会",
        }
    ]
}

解决方法

  1. 通过重写ListCreateAPIView,新建genericsview.py

    from rest_framework import generics
    from rest_framework.response import Response
    # 重写查询返回格式
    class ReListView(generics.ListCreateAPIView):
        def list(self, request, *args, **kwargs):
            # 重写response 返回信息
            response = {‘retcode‘: 200, ‘msg‘: ‘查询成功‘}
    
            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)
            # 将原来的结果放进response字典
            response[‘retlist‘] = serializer.data
            return Response(response)
    
  2. 原来view中继承ListCreateAPIView的替换成自己重写的ReListView

    class ProjectList(ReListView):
        queryset = Project.objects.all()
        serializer_class = ProjectSerializer
    
  3. 重启django,返回结果成功加上了自己新增的返回字段

其他解决方法

重写render的方法需要,需要setting中增加配置,重写JSONRenderer中的render方法

优点:全局改写

缺点:restframework自带的界面用不了,暂时还没找到解决方法

? 不同请求方式,需要判断不同请求的返回内容

关于其他APIView

ListCreateAPIView,其他四个View也可以使用重载的方法重写,只需要重写5个APIView

django,restframework,GenericAPIView重写返回格式

原文:https://www.cnblogs.com/gotesting1/p/14615033.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!