django drf 统一Response格式

news/2024/10/4 6:59:40/

场景

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

例如:

响应体中包含以下字段:

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

具体代码

工具类:

python">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)

视图类中使用:

python">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.ppmy.cn/news/1533762.html

相关文章

2025秋招内推--招联金融

【投递方式】 直接扫下方二维码,或点击内推官网https://wecruit.hotjob.cn/SU61025e262f9d247b98e0a2c2/mc/position/campus,使用内推码 igcefb 投递) 【招聘岗位】 后台开发 前端开发 数据开发 数据运营 算法开发 技术运维 软件测试 产品策…

【MySQL】MySQL库的操作

> 作者:დ旧言~ > 座右铭:松树千年终是朽,槿花一日自为荣。 > 目标:掌握对库操作的语句并能熟练掌握。 > 毒鸡汤:有些事情,总是不明白,所以我不会坚持。早安! > 专栏选自&#x…

DOM元素导出图片与PDF:多种方案对比与实现

背景 在日常前端开发中,经常会有把页面的 DOM 元素作为 PNG 或者 PDF 下载到本地的需求。例如海报功能,简历导出功能等等。在我们自家的产品「代码小抄」中,就使用了 html2canvas 来实现代码片段导出为图片: 是不是还行&#xff…

Docker Compose 部署大模型GPU集群:高效分配与管理算力资源

Docker Compose 部署大模型GPU集群:高效分配与管理算力资源 文章目录 Docker Compose 部署大模型GPU集群:高效分配与管理算力资源一 Dockerfile 编写二 Dockerfile 示例三 分配GPU资源1)GPU分配:指定count2)GPU分配&am…

如何将自定义支付网关与 WooCommerce Checkout 区块集成

从 8.3 开始的 WooCommerce版本中,您可能会注意到您的自定义付款方式在结账区块中不可用。 例如,如果您尝试停用商店中除自定义付款方式之外的所有付款方式,您可能会收到如下错误消息: 这里我使用 Storefront 主题作为示例&#…

c++ 使用 Graham 扫描的凸包(Convex Hull using Graham Scan)

先决条件: 如何检查两个给定的线段是否相交? c https://blog.csdn.net/hefeng_aspnet/article/details/141713655 java https://blog.csdn.net/hefeng_aspnet/article/details/141713762 python https://blog.csdn.net/hefeng_aspnet/article/details/…

传知代码-一键找出图像中物体的角点(论文复现)

代码以及视频讲解 本文所涉及所有资源均在传知代码平台可获取 概述 本文复现论文A COMBINED CORNER AND EDGE DETECTOR中提出的图像中的物体角点检测算法,也称Harris算法。原文连接https://citeseerx.ist.psu.edu/document?repidrep1&typepdf&doi88cdfbeb78058e0eb…

如何选择与运用编程工具提升工作效率的秘密武器

在当今这个信息爆炸、技术日新月异的时代,编程工具的选择对于开发者来说至关重要。一款合适的编程工具不仅能够简化代码编写,还能自动化任务,提升调试速度,甚至让团队协作更加顺畅。那么,哪款编程工具能让我们的工作效…