当前位置: 首页 > 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都可以

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【机器学习(十一)】机器学习分类案例之是否患糖尿病预测—XGBoost分类算法—Sentosa_DSML社区版
  • 精密制造的革新:光谱共焦传感器与工业视觉相机的融合
  • node.js从入门到快速开发一个简易的web服务器
  • Vue 响应式监听 Watch 最佳实践
  • Jenkins的安装
  • 【从0开始自动驾驶】ros2编写自定义消息 msg文件和msg文件嵌套
  • 树莓派pico上手
  • 著名建筑物检测与识别系统源码分享
  • 基于densenet模型在RML201610a数据集上的调制识别【代码+数据集+python环境+GUI系统】
  • 【UE5】将2D切片图渲染为体积纹理,最终实现使用RT实时绘制体积纹理【第四篇-着色器投影-接收阴影部分】
  • 实时湖仓架构演变
  • Llama 3.2:利用开放、可定制的模型实现边缘人工智能和视觉革命
  • OpenCV
  • Focalboard开源项目管理系统本地Windows部署与远程访问协同办公
  • 住宅ip有什么特殊点
  • @jsonView过滤属性
  • 0基础学习移动端适配
  • javascript 哈希表
  • Laravel 菜鸟晋级之路
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • Python3爬取英雄联盟英雄皮肤大图
  • Python学习之路13-记分
  • spring学习第二天
  • VuePress 静态网站生成
  • 编写符合Python风格的对象
  • 成为一名优秀的Developer的书单
  • 从0到1:PostCSS 插件开发最佳实践
  • 飞驰在Mesos的涡轮引擎上
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 日剧·日综资源集合(建议收藏)
  • 我这样减少了26.5M Java内存!
  • Python 之网络式编程
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • # 服务治理中间件详解:Spring Cloud与Dubbo
  • #pragma once与条件编译
  • #调用传感器数据_Flink使用函数之监控传感器温度上升提醒
  • (2024,Flag-DiT,文本引导的多模态生成,SR,统一的标记化,RoPE、RMSNorm 和流匹配)Lumina-T2X
  • (39)STM32——FLASH闪存
  • (C语言)strcpy与strcpy详解,与模拟实现
  • (八)Flask之app.route装饰器函数的参数
  • (附源码)python旅游推荐系统 毕业设计 250623
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (数据结构)顺序表的定义
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (万字长文)Spring的核心知识尽揽其中
  • (未解决)macOS matplotlib 中文是方框
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • ..回顾17,展望18
  • .NET CF命令行调试器MDbg入门(一)
  • .NET Core、DNX、DNU、DNVM、MVC6学习资料
  • .NET(C#) Internals: as a developer, .net framework in my eyes
  • .NET精简框架的“无法找到资源程序集”异常释疑
  • /usr/bin/python: can't decompress data; zlib not available 的异常处理
  • ?php echo ?,?php echo Hello world!;?
  • @JsonSerialize注解的使用