当前位置: 首页 > news >正文

django drf 统一Response格式

场景

需要将响应体按照格式规范返回给前端。

例如:

响应体中包含以下字段:

{"result": true,"data": {},"code": 200,"message": "ok","request_id": "20cadfe4-51cd-42f6-af81-016639232a66"
}

具体代码

工具类:

import loggingfrom rest_framework import status
from rest_framework.response import Responsefrom django_middleware_global_request import get_requestlogger = logging.getLogger("app")class ResponseMixin:def finalize_response(self, request, response, *args, **kwargs):"""异常处理函数,搭配custom_exception_handler进行处理:param request::param response::param args::param kwargs::return:"""global_request = get_request()current_reqeust_id = getattr(global_request, "current_request_id", None)if not getattr(request, "_wrapper_response", True):if isinstance(response, Response) and isinstance(response.data, dict):response.data["request_id"] = current_reqeust_idreturn super().finalize_response(request, response, *args, **kwargs)if isinstance(response, Response):if not response.exception:response.data = {"result": True,"data": response.data,"code": 200,"message": "ok","request_id": current_reqeust_id,}else:response.data = {"result": False,"data": response.data,"code": response.status_code,"message": str(response.data),"error": str(response.data),"request_id": current_reqeust_id,}response.status_code = status.HTTP_200_OKresponse.is_log_resp = Truereturn super().finalize_response(request, response, *args, **kwargs)

视图类中使用:

from common.drf.mixins import ResponseMixin
from rest_framework.viewsets import GenericViewSet, ModelViewSetclass TestViewSet(ResponseMixin,  # 继承工具类ModelViewSet):  # 必须继承viewset, GenericViewSet和ModelViewSet都可queryset = models.TestModel.objects.all()serializer_class = serializers.TestSerializer

注意:

视图类必须继承viewset,无论是GenericViewSet和ModelViewSet都可以


http://www.mrgr.cn/news/36599.html

相关文章:

  • Java中的接口以及抽象类与接口的关系
  • 3分钟,教你判断自己适不适合做项目管理!
  • 2024开放式蓝牙耳机排行榜是哪些耳机?推荐5款热门开放式耳机!
  • 【Linux学习】2-1 Linux系统下运行C语言输出hello word
  • 基于 Flask 和 Vue 的 MVC 分层结构详解
  • 浅谈软件安全开发的重要性及安全开发实践
  • 大屏自适应方案
  • MongoDB学习
  • 深度学习之开发环境(CUDA、Conda、Pytorch)准备(4)
  • Redis学习
  • antd嵌套表单验证
  • 请问,项目经理们,PMP证书有用吗?
  • 2024中国新能源汽车零部件交易会,开源网安展示了什么?
  • Dbt自动化测试实战教程
  • 在大模型应用层面区分对比检索增强生成RAG技术和知识库技术
  • Android 系统增加ro property
  • 基于Dockerfile打包算法镜像
  • vue-i18n在使用$t时提示类型错误
  • Jupyter Neo4j
  • Ansible-使用roles