范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

Django实现统一包装接口返回值数据格式

  前言
  最近实在太忙了,开始了一个新的项目,为了快速形成产品,我选择了Django来实现后端,然后又拿起了之前我封装了项目脚手架「DjangoStarter」。
  由于前段时间我写了不少.NetCore的后端代码,对CRUD的接口开发又有了一些新的理解,所以肯定也要把DjangoStarter改造一番,改得更加顺手~
  题外话:话说我在前端终于真正用上react,不得不说 ts + react 真好用,「前端带师」的安利可真不错啊(妙啊 正题
  准确来讲是搭配 DjangoRestFramework  来实现的,核心代码分为两部分,一个是错误处理包装,一个是响应包装renderer  。
  无论请求是否报错,都会被我们自定义的 renderer  包装。代码
  开始上代码吧~
  首先在项目里添加一个新的Python包,位置根据情况自行安排,我在 DjangoStarter  模板中的位置是utils/response  ,接下来的两个文件都会放在这个目录中
  第一个是错误处理的 exception.py  文件代码from typing import Dict  from rest_framework.exceptions import ValidationError from rest_framework.views import exception_handler from rest_framework.views import Response from rest_framework.utils.serializer_helpers import ReturnDict from rest_framework import status   def custom_handler(err: ValidationError, context: dict):     # 先调用REST framework默认的异常处理方法获得标准错误响应对象     response: Response = exception_handler(err, context)      if response is None:         return Response({             "message": f"服务器错误:{err}"         }, status=status.HTTP_500_INTERNAL_SERVER_ERROR, exception=True)      else:         res = {"message": response.reason_phrase}         res.update(response.data)         return Response(res, status=response.status_code, exception=True)
  然后是自定义 renderer.py  代码:from rest_framework.renderers import JSONRenderer   class CustomRenderer(JSONRenderer):     # 重构render方法     def render(self, data, accepted_media_type=None, renderer_context=None):         if renderer_context:             # 响应的信息,成功和错误的都是这个             # 成功和异常响应的信息,异常信息在前面自定义异常处理中已经处理为{"message": "error"}这种格式              # 如果返回的data为字典             if isinstance(data, dict):                 # 响应信息中有message和code这两个key,则获取响应信息中的message和code,并且将原本data中的这两个key删除,放在自定义响应信息里                 # 响应信息中没有则将msg内容改为请求成功 code改为请求的状态码                 msg = data.pop("message", "请求成功")                 code = data.pop("code", renderer_context["response"].status_code)             # 如果不是字典则将msg内容改为请求成功 code改为响应的状态码             else:                 msg = "请求成功"                 code = renderer_context["response"].status_code              # 自定义返回的格式             ret = {                 "message": msg,                 "code": code,                 "data": data,             }             # 返回JSON数据             return super().render(ret, accepted_media_type, renderer_context)         else:             return super().render(data, accepted_media_type, renderer_context)
  关键的地方都注释了,很容易看懂
  包装出来每个接口的返回值就都是这个样子 {     "message": "msg",     "code": 200,     "data": {         "data1": "123"     } } 配置
  为了让上面的代码发挥作用,还得配置一下RestFramework
  编辑 settings.py  文件,在REST_FRAMEWORK  节点添加这两个配置,注意路径要和前面两个文件的路径一致。这里我是以DjangoStarter  项目为例。REST_FRAMEWORK = {     # 全局配置异常模块     "EXCEPTION_HANDLER": "utils.response.exception.custom_handler",     # 修改默认返回JSON的renderer的类     "DEFAULT_RENDERER_CLASSES": ("utils.response.renderer.CustomRenderer",), }
  现在就完成了~ 就是这么简单。
  (比AspNetCore包装返回值简单……)
  完整代码可以在GitHub上查看:https://github.com/Deali-Axy/DjangoStarter 参考资料Django rest framework自定义返回数据格式:https://blog.csdn.net/qq_41475058/article/details/112676908
  本文来自https://www.cnblogs.com/deali/p/16094959.html

发力新能源青岛高新区迈上双碳快车道来源信网责编伏仪20220218193157信网2月18日讯(通讯员肖玲玲记者陆彦蓉)自主研发柔性偏航系统,实现风电机组偏航系统对机组的柔性驱动,降低偏航轴承和偏航减速器的损伤,提一天烧掉一个亿,掀翻整个快递市场,极兔快递为何如此嚣张?网购对于我们并不陌生,因为它已经成为人们生活中不可或缺的一部分,在互联网经济红利的催化下,诞生了无数家独角兽企业,同时垄断着整个快递行业,例如顺丰快运菜鸟网络滴滴货运等,但是,近年字节跳动辟谣投资极兔,2022年将加速布局跨境电商市场?近日,有消息称字节跳动已完成对极兔快递的投资,用以补齐电商拼图,扩充海外电商布局。对此,字节跳动和极兔双方均对此表示否认,并称消息不实。据了解,字节跳动或收购快递企业的声音并非首次新规落地!3月1日后,这类商贩将无法收到微信支付宝转账文科技君新规落地!3月1日后,这类商贩将无法收到微信支付宝转账!随着科技不断发展,中国人的支付习惯也发生了很大的改变。曾经,要是想出趟门或者说去菜市场买菜,那你得揣个钱包,不然寸步什么软件安装在对方手机上能看其聊天记录?手机远程控制手机的软件AirDroid和AirMirror。需要在被控端安装AirDroid,控制端安装AirMirror。两部手机登陆同个账号即可实现远程控制。还有teamvie人生中有哪一款手机是你印象最深刻的?谢邀!其实这么多年以来,放大镜使用过的手机也不少,也确实有很多产品对留下了深刻的印象,从当年啧啧称奇的iPhone4S,到后来的HTCM7M8还包括锤子的T1锤子的坚果Pro,iP投行Stifel比特币明年或跌至1万美元投行Stifel在一份最新报告中表示,比特币可能从目前水平下跌76,到2023年跌至1万美元,这种加密货币正面临影响其价格的三大宏观不利因素。Stifel分析师巴里班尼斯特(Bar她是孟晚舟的生母,父亲是四川副省长,曾因200万开除老公任正非如今已经是科技巨头的华为集团可谓是无人不知无人不晓,不过华为集团的创业过程却是非常艰难的,不同于西方的一些科技巨头,华为集团在创业的历程中可谓是饱经坎坷,屡屡遭遇重大的挑战,这也让京东001号快递员死心塌地送快递12年,刘强东答应他的实现没?随着互联网行业的稳定发展,物流公司与电商平台之间的合作也越发密切。而京东在这场博弈中,展示了自己的与众不同之处,那就是拥有属于自己的物流体系。京东快递不论是运输速度还是包装完整度或电磁摇杆加持体验如何?谷粒金刚2Pro手柄开箱逢年过节,在家里总是很热闹,而且长假期天天下雨也没地方可以去玩,所以我提早购买了一个游戏手柄来呆在家里玩游戏,看着淋漓满目的手柄,我真是摸不着头脑,毕竟游戏手柄买过不少,但都已经铺快手打击宣扬拜金类不良内容IT之家2月19日消息,快手昨日发布关干打击宣扬拜金类不良内容的公告称,平台已经通过技术手段与人工审核等方式对涉及相关违规行为的账号进行审查,并对违规用户给予减少推荐内容删除账号封
俄罗斯00后天才情侣加入华为近日,华为宣布年仅22岁的瓦莱里娅里亚布奇科娃(ValeriaRyabchikova),已正式加入华为俄罗斯下诺夫哥罗德研究所,任职高级工程师,从事智能计算应用加速技术方面的研究。正则表达式函数封装案例直接拿来用什么是正则表达式我们平时打游戏需要先注册账号,注册不是随意的,而是按照一定的规则,否则就无法注册成功。那么这个规则的判断就是通过正则表达式来判断的。其他语言也会使用正则表达式,我们老罗终于可以坐飞机了老罗被执行人信息清零。意味着老罗可以坐飞机,可以买点东西了。老罗一生很传奇,一个50岁的中年男人依然在继续着传奇奋斗史。高二退学,2000年给现在当红主播俞敏洪写求职信,两次试讲失工信部共4款降噪耳机获工信部A级认证,漫步者两款在列据国家工业信息安全发展研究中心官网显示,经测评,漫步者TWSNB2漫步者NeoBudsProOPPOEncoFree2iOnePlusBudsPro共4款产品在测评中综合表现优异,春节期间快递停吗?国家邮政局回应谣言又来了?近日,春节期间快递停运的消息又在网络上传播开来。经记者核实,该传言为假消息,今年春节期间,EMS顺丰京东物流等主要寄递企业均表示春节不打烊。根据各快递企业发布的服务公告物流春节不打烊升级,行业下半场服务战打响离春节只有半个月时间了,近年来,年货已从零散的线下采购向线上网购转移,各家电商平台相继推出年货节活动,在全民消费水平提升进行时,多家物流服务商也再次宣布春节不打烊。如今物流春节不打哪一个版本的电脑系统最好用?经常使用电脑的小伙伴们,你们现在使用的是哪一个版本的电脑系统?记得以前最早的用DOS,后来使用Windows95,接着使用Windows98,然后使用WindowsXPWindow被称作胶水语言的Python,到底该怎么学不管是前几年还是现在,Python在编程界一直处于C位,确实Python一直被称为胶水语言肯定是有它的优势不论从自身的可读性维护性移植性及跨平台等优势来说,受到了众多开发者的青睐,蔚来正式发布NIOOS3。0。0系统近日,蔚来正式发布了NIOOS3。0。0系统,并向用户开启推送。新版本带来全新的界面交互设计,新增组队出行潮汐全民K歌等多个全新功能,并优化了NOMINIOPilot等功能体验。为沉默已久的戴尔,原来在闷声发大财如今的戴尔,早已不仅仅是一家电脑公司。文丨华商韬略南来很少有人记得,仅仅在八年前,这家公司曾经被逼到了怎样山穷水尽的绝境。五年等待2018年12月28日,阔别美股市场五年之久的戴尔对于今日头条,你认为哪些方面需要改进?答千提问不如一改进!1规范正规化提问,杜绝负能量无聊低级趣味挑衅性问题。2设置可以选择关闭私信功能(因为经常有负能量骚扰)3凡是粗话脏话识别系统要及时删除。4肃清攻击祖国的反动言论