Flask-REXTx 学习笔记——1.响应编组(Response marshalling)

记录对Flask-REXTx的学习笔记

简介

  • Flask-RESTx是一个基于Flask的扩展,它提供了一些额外的功能来帮助开发人员更轻松地构建强大的RESTful API。这些功能包括API文档的自动生成、请求参数解析和API资源管理等。Flask-RESTx的目标是在维护API时能够提供更好的文档和工具支持。
  • 它是Flask-RESTful的增强版(实际上是因为lask-RESTful的开发者在GitHub上迟迟不处理BUG和优化,所以有人做了一个分支开发了Flask-RESTx),完全兼容Flask-RESTPlus,提供了更规范化的接口编写方式,并支持Swagger文档,这使得API的设计和文档化更加清晰和简便。

用 Flask-RESTx 还是蓝图 blueprint?

  • 我的项目之前是用蓝图来构建和组织后端结构的,但是它缺少RESTful API的某些特定支持,例如基于Swagger的接口文档自动生成。
  • 随着项目体量增大,不便于开发人员查阅和参考,也没有可供调试的接口。最重要的是,新人没有一个快速入手的文档以供查询,基本都靠口口相传。
  • 加上虽然我们的后端设计思想是符合 RESTful AIP的,但是API 文档也是它的一个重要部分。
  • 所以基于以上原因,决定引入 Flask-RESTx。之后新内容用 Flask-RESTx,旧内容依旧用蓝图,目前不改动。

响应编组(Response marshalling)

  • 基本用法:
    i.api.model + api.marshal_with(model, envelope)
    ii.envelope 会将输出按对应参数进行一层字典包装
from flask_restx import Resource, fieldsmodel = api.model('Model', {'name': fields.String,'address': fields.String,'date_updated': fields.DateTime(dt_format='rfc822'),
})@api.route('/todo')
class Todo(Resource):@api.marshal_with(model, envelope='resource') // 这里的最终输出变成 {'resource': db_get_todo()}def get(self, **kwargs):return db_get_todo()  # Some function that queries the db
  • 重命名属性
    i.通常,面向公众的字段名称与内部字段名称不同。要配置此映射
    ii.也可以使用匿名函数或者嵌套属性
'address': fields.String,
}
model = {'name': fields.String(attribute=lambda x: x._private_name),'address': fields.String,
}
model = {'name': fields.String(attribute='people_list.0.person_dictionary.name'),'address': fields.String,
}
  • 默认值
model = {'name': fields.String(default='Anonymous User'),'address': fields.String,
}
  • 自定义字段和多个值:适合特定的格式需求
class UrgentItem(fields.Raw):def format(self, value):return "Urgent" if value & 0x01 else "Normal"class UnreadItem(fields.Raw):def format(self, value):return "Unread" if value & 0x02 else "Read"model = {'name': fields.String,'priority': UrgentItem(attribute='flags'),'status': UnreadItem(attribute='flags'),
}
  • Url 和其他具体字段
model = {'name': fields.String,'uri': fields.Url('', absolute=True), // 能返回当前访问的url,absolute参数可以返回完整的url
}
  • 复杂结构
    i.marshal() 将一个平面结构的 data 转换成复杂结构
from flask_restx import fields, marshal
import json
resource_fields = {'name': fields.String,'address': {'line 1': fields.String(attribute='addr1'),'line 2': fields.String(attribute='addr2'),'city': fields.String,'state': fields.String,'zip': fields.String}
}@api.route('/test')
class testMarshal(Resource):def post(self):data = {'name': 'bob', 'addr1': '123 fake street', 'addr2': '', 'city': 'New York', 'state': 'NY', 'zip': '10468'}return marshal(data, resource_fields)
  • 通配符字段
    i.只关心值的类型,不关心key的名称时,使用 Wildcard 构建。
    ii.注意这里不是正则表达式,只能简单使用 * 和 ?。
>>> from flask_restx import fields, marshal
>>> import json
>>>
>>> wild = fields.Wildcard(fields.String)
>>> wildcard_fields = {'*': wild}
>>> data = {'John': 12, 'bob': 42, 'Jane': '68'}
>>> json.dumps(marshal(data, wildcard_fields))
>>> '{"Jane": "68", "bob": "42", "John": "12"}'>>> wildcard_fields = {'j*': wild}
>>> data = {'John': 12, 'bob': 42, 'Jane': '68'}
>>> json.dumps(marshal(data, wildcard_fields))
>>> '{"Jane": "68", "John": "12"}'

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/25786.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MFC 教程-回车时窗口退出问题

【问题描述】 MFC窗口默认时,按回车窗口会退出 【原因分析】 默认调用OnOK() 【解决办法】 重写虚函PreTranslateMessage BOOL CTESTMFCDlg::PreTranslateMessage(MSG* pMsg) {// TODO: 在此添加专用代码和/或调用基类// 修改回车键的操作反应 if (pMsg->…

C++11新特性【上】(统一的列表初始化、auto、decltype、右值引用、万能引用、完美转发)

一、C11简介 在2003年C标准委员会曾经提交了一份技术勘误表(简称TC1),使得C03这个名字已经取代了 C98称为C11之前的最新C标准名称。不过由于C03(TC1)主要是对C98标准中的漏洞 进行修复,语言的核心部分则没有改动,因此人们习惯性的把两个标准合…

Web前端中级探索:技术进阶与困惑之旅

Web前端中级探索:技术进阶与困惑之旅 在Web开发领域,前端技术扮演着至关重要的角色。对于中级前端开发者而言,这是一个既充满挑战又充满机遇的阶段。本文将从四个方面、五个方面、六个方面和七个方面,深入探讨Web前端中级阶段的技…

高德地图简单实现点标,和区域绘制

高德地图开发文档:https://lbs.amap.com/api/javascript-api/guide/abc/quickstart 百度搜索高德地图开发平台 注册高德地图开发账号 在应用管理中 我的应用中 添加一个Key 点击提交 进入高德地图开发文档:https://lbs.amap.com/api/javascript-api/guide/abc/quickstart …

Mysql 的分布式策略

1. 前言 MySQL 作为最最常用的数据库,了解 Mysql 的分布式策略对于掌握 MySQL 的高性能使用方法和更安全的储存方式有非常重要的作用。 它同时也是面试中最最常问的考点,我们这里就简单总结下 Mysq 的常用分布式策略。 2. 复制 复制主要有主主复制和…

使用 C# 学习面向对象编程:第 2 部分

C# 类属性简介 属性在面向对象编程中起着至关重要的作用。它们允许我们从类外部访问类的私有变量。在类中使用私有变量是很好的。属性看起来像变量和方法的组合。属性有部分:“get 和 set”方法。get 方法应该返回变量,而 set 方法应该为其赋值。 步骤…

Chat-TTS:windows本地部署实践【有手就行】

最近Chat-TTS模型很火,生成的语音以假乱真,几乎听不出AI的味道。我自己在本地部署玩了一下,记录一下其中遇到的问题。 环境: 系统:windows 11 GPU: Nvidia 4060 Cuda:12.1(建议安…

【前端】详解JavaScript事件代理(事件委托)

😎 作者介绍:我是程序员洲洲,一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主。 🤓 同时欢迎大家关注其他专栏,我将分享Web前后端开发、人工智能、机器学习、深…

3 数据类型、运算符与表达式-3.3.2 整型变量(原码,反码,补码)

在计算机科学中,补码、原码和反码是用来表示带符号整数的二进制编码方法,特别是在计算机内存中存储和处理整数时。这些编码方式帮助计算机区分正数和负数,并支持算术运算。以下是它们的具体含义: 原码(True Form or S…

【OC】类与对象

类与对象 定义类接口部分定义成员变量方法说明实现部分 对象的产生与使用对象与指针self关键字避免重复创建 id类型方法详解方法的所属性形参个数可变的方法 成员变量成员变量及其运行机制多个实例中内存示意图模拟类变量单例模式 类是面向对象的重要内容,我们可以把…

JS中一个dom元素能绑定多少事件

在JavaScript中,一个DOM元素可以绑定的事件数量并没有明确的限制,这主要取决于浏览器的实现和内存限制。然而,在实际应用中,为同一个DOM元素绑定过多的事件监听器可能会导致性能问题,尤其是在事件处理函数执行复杂操作…

【系统学C++】二、从C语言到C++(二)

【系统学C】二、从C语言到C(二) bool 类型怎么打印 bool 类型的值 强弱类型C语言的类型系统C的类型系统总结 NULL 和 nullptrNULLnullptr示例 起别名使用 typedef使用 using 关键字(C11及以后)注意 void* 万能指针C语言中的 void…

46-4 等级保护 - 网络安全等级保护概述

一、网络安全等级保护概述 原文:没有网络安全就没有国家安全 二、网络安全法 - 安全立法 中华人民共和国主席令 第五十三号 《中华人民共和国网络安全法》已于2016年11月7日由中华人民共和国第十二届全国人民代表大会常务委员会第二十四次会议通过,并自2017年6月1日起正式…

Docker快速部署springboot项目

本文概述 本文主要介绍了怎么将springboot项目打包为docker镜像,并如何在后端服务器上使用docker快速部署springboot应用和nginx应用。 一、打包springboot项目 1、复制原来的application.yml文件然后重命名为application-pro.yml文件,将application-pro…

【数据结构】图之邻接矩阵代码实现与dfs、bfs

一、图的相关概念 图的相关概念包括顶点、边、有向图和无向图等。图是计算机科学中一个核心的数据结构,用于描述对象之间的关系。它由顶点(节点)的集合和连接这些顶点的边的集合组成。具体分析如下: 顶点:图中的基本构…

linux 关于jq的安装和使用

文章目录 前言 一、jq是什么? 二、安装方法 1.在线安装 2.离线安装 三、使用方法 1. 读取json字符串并解析 2.读取json文件并解析 3.遍历json数组,查询姓名为Bob学生的年龄 总结 前言 今天要写一个自定义的脚本,涉及到对json数据的解…

SOA的设计模式_2.企业服务总线模式

1.企业服务总线(|Enterprise Service Bus,ESB) 在企业基于SOA实施EAI、B2B和BMP的过程中,如果采用点对点的集成方式存在着复杂度高,可管理性差,复用度差和系统脆弱等问题。企业服务总线(…

【微信小程序】事件传参的两种方式

文章目录 1.什么是事件传参2.data-*方式传参3.mark自定义数据 1.什么是事件传参 事件传参:在触发事件时,将一些数据作为参数传递给事件处理函数的过程,就是事件传参 在微信小程序中,我们经常会在组件上添加一些自定义数据,然后在…

定个小目标之刷LeetCode热题(12)

这是一道简单题,使用位运算中的异或运算即可,异或运算有以下性质: 1、任何数异或 0 结果仍然是原来的数,即 a⊕0a 2、任何数和其自身做异或运算,结果是 0 所以我们只需要让数组里的所有元素进行异或运算得到的结果就…

oracle的bitmap索引是什么

Oracle的Bitmap索引是一种特殊的索引类型,主要用于处理那些数值稀疏(low-cardinality,低基数)的字段,特别是那些值不经常改变的字段。以下是关于Bitmap索引的详细解释: 定义: Bitmap索引是一种…