flask_restful中的输出域(Resource、fields、marshal、marshal_with)
1、fields字段的简单使用
示例代码:
import json
from datetime import datetime
from flask_restful import fields, marshal# 基本例子
resource_fields = {'name': fields.String,'address': fields.String,'date_updated': fields.DateTime(dt_format='rfc822'),
}class UserInfo(object):def __init__(self, name, address, date_updated=datetime.now()):self.name = nameself.address = addressself.date_updated = date_updatedprint(UserInfo('dgw', 'beijing'))
print(UserInfo('dgw', 'beijing').name, UserInfo('dgw', 'beijing').address)
print(json.dumps(marshal(UserInfo('dgw', 'beijing'), resource_fields)))
运行结果:
2、fields字段起别名
示例代码:
import json
from datetime import datetime
from flask_restful import fields, marshalclass UserInfo(object):def __init__(self, name, address, date_updated=datetime.now()):self.name = nameself.address = addressself.date_updated = date_updated# 输出域别名
resource_fields2 = {'open_name': fields.String(attribute='name'),'open_name2': fields.String, # 如果获取不到该名称对应的属性名,将返回空值'address': fields.String,'date_updated': fields.DateTime(dt_format='rfc822'),
}
print(json.dumps(marshal(UserInfo('dgw', 'beijing'), resource_fields2)))
运行结果:
3、fields字段输出默认值
示例代码:
import json
from datetime import datetime
from flask_restful import fields, marshal# # 输出域默认值
class UserInfo2(object):def __init__(self, address):self.address = addressresource_fields3 = {'open_name': fields.String(default='add_dgw'),'address': fields.String,'date_updated': fields.DateTime(dt_format='rfc822', default=str(datetime.now())),
}print(json.dumps(marshal(UserInfo2(address='beijing'), resource_fields3)))
运行结果:
4、fields字段自定义输出域
示例代码:
import json
from datetime import datetime
from flask_restful import fields, marshal# 自定义输出域
class UserInfo2(object):def __init__(self, address, flag, date_updated=datetime.now()):self.address = addressself.date_updated = date_updatedself.flags = flagclass UrgentItem(fields.Raw):def format(self, value):return "Urgent" if value & 0x01 else "Normal"resource_fields4 = {'open_name': fields.String(default='add_DGW'),'address': fields.String,'date_updated': fields.DateTime(dt_format='rfc822'),'priority': UrgentItem(attribute='flags'),
}
print(json.dumps(marshal(UserInfo2(address='beijing', flag=0), resource_fields4)))
print(json.dumps(marshal(UserInfo2(address='beijing', flag=1), resource_fields4)))
运行结果:
5、fields字段嵌套List类型
示例代码:
import json
from datetime import datetime
from flask_restful import fields, marshal# 基本例子
resource_fields = {'name': fields.String,'address': fields.String,'teachers': fields.List(fields.String),'date_updated': fields.DateTime(dt_format='rfc822'),
}class UserInfo(object):def __init__(self, name, address, teachers, date_updated=datetime.now()):self.name = nameself.address = addressself.teachers = teachersself.date_updated = date_updatedprint(UserInfo('dgw', 'beijing', ['AAA', 'BBB']))
print(UserInfo('dgw', 'beijing', ['AAA', 'BBB']).name, UserInfo('dgw', 'beijing', ['AAA', 'BBB']).teachers)
print(json.dumps(marshal(UserInfo('dgw', 'beijing', ['AAA', 'BBB']), resource_fields, envelope=False)))
运行结果:
6、fields字段嵌套Nested类型
示例代码:
import json
from datetime import datetime
from flask_restful import fields, marshalclass TeacherInfo(object):def __init__(self, name, age, sex):self.name = nameself.age = ageself.sex = sexteacher_fields = {'name': fields.String,'age': fields.String,'sex': fields.String}class UserInfo(object):def __init__(self, name, address, teachers, date_updated=datetime.now()):self.name = nameself.address = addressself.teachers = teachersself.date_updated = date_updateduser_fields = {'name': fields.String,'address': fields.String,'teachers': fields.Nested(TeacherInfo.teacher_fields),'date_updated': fields.DateTime(dt_format='rfc822'),}aa = json.dumps(marshal(TeacherInfo('AAA', '26', 'man'), TeacherInfo.teacher_fields))
print(aa)teacher1 = marshal(TeacherInfo('AAA', '26', 'man'), TeacherInfo.teacher_fields)
teacher2 = marshal(TeacherInfo('BBB', '25', 'woman'), TeacherInfo.teacher_fields)bb = json.dumps(marshal(UserInfo('dgw', 'beijing', [teacher1, teacher2]), UserInfo.user_fields))
print(bb)
运行结果:
7、fields字段中的复杂结构
示例代码:
import json
from flask_restful import fields, marshal# 复杂结构
resource_fields = {'name': fields.String}
resource_fields['address'] = {}
resource_fields['address']['line 1'] = fields.String(attribute='addr1')
resource_fields['address']['line 2'] = fields.String(attribute='addr2')
resource_fields['address']['city'] = fields.String
resource_fields['address']['state'] = fields.String
resource_fields['address']['zip'] = fields.String
data = {'name': 'bob', 'addr1': 'shanghai', 'addr2': '', 'city': 'New York', 'state': 'NY', 'zip': '10468'}
print(json.dumps(marshal(data, resource_fields)))
运行结果:
8、fields字段中的嵌套域
示例代码:
import json
from flask_restful import fields, marshal# 嵌套域
address_fields = {}
address_fields['line 1'] = fields.String(attribute='addr1')
address_fields['line 2'] = fields.String(attribute='addr2')
address_fields['city'] = fields.String(attribute='city')
address_fields['state'] = fields.String(attribute='state')
address_fields['zip'] = fields.String(attribute='zip')resource_fields = {}
resource_fields['name'] = fields.String
resource_fields['billing_address'] = fields.Nested(address_fields)
resource_fields['shipping_address'] = fields.Nested(address_fields)address1 = {'addr1': 'qingdao', 'city': 'New York', 'state': 'NY', 'zip': '10468'}
address2 = {'addr1': 'nanjing', 'city': 'New York', 'state': 'NY', 'zip': '10468'}address3 = {'line 1': 'wuhan', 'line 2': 'tianmen', 'city': 'New York', 'state': 'NY', 'zip': '10468'}
address4 = {'addr1': 'wuhan', 'addr2': 'tianmen', 'city2': 'New York', 'state': 'NY2', 'zip': '11002'}data1 = {'name': 'bob', 'billing_address': address1, 'shipping_address': address2}
data2 = {'name': 'bob', 'billing_address': address3, 'shipping_address': address4}print(json.dumps(marshal(data1, resource_fields)))
print(json.dumps(marshal(data2, resource_fields)))
运行结果:
flask_restful中的输出域(Resource、fields、marshal、marshal_with)相关推荐
- JS中的跨域问题及解决办法汇总
一.什么是跨域? 在了解跨域之前,首先要知道什么是同源策略(same-origin policy).简单来讲同源策略就是浏览器为了保证用户信息的安全,防止恶意的网站窃取数据,禁止不同域之间的JS进行交 ...
- javascript中实现跨域的方式总结
js中的跨域请求应该也算是一个重点,具体什么叫跨域,在这里我就不展开了,可以查一下浏览器的同源策略和跨域的定义.原来只知道常用的jsonp和document.domain这两种方式,这几天学习了一下其 ...
- 【6】测试用例设计-输入域+输出域+异常分析+错误出错法
目录 输入域测试 输出域测试 异常分析 错误猜测 输入域测试 极端测试如学生成绩0分,1分,2分,情况很少这种. 特殊值如-99,0,99 长时间输入内存溢出,内存泄露. 输出域测试 异常分析 异常操 ...
- yii2 跨域请求配置_如何在SpringBoot应用中实现跨域访问资源和消息通信?
允许跨域访问 CORS ( Cross Origin Resource Sharing,跨域资源共享)机制允许Web应用服务器进行跨域访问控制,从而使跨域数据传输得以安全进行.浏览器支持在API容器中 ...
- [Mailbox]SIM卡中Alpha Identifier域解析
简介:3GPP TS 11.11的EFADN域详细介绍了手机SIM卡中Alpha Identifier域的组织方法,因为工作中使用到Mailbox name解析,而Mailbox name的解析方法是 ...
- TIA博途WINCC中给IO域添加确认功能的具体方法步骤
TIA博途WINCC中给IO域添加确认功能的具体方法步骤 在TIA博途中新建一个项目,添加一个PLC和HMI设备,这里就不再演示添加过程,在PLC默认变量表中添加一个"输出变量", ...
- HTTP中的跨域请求、HTTP报文结构、状态码
目录 一.前驱知识学习 (1)请求报文 (2)响应报文 二.HTTP中的跨域请求 1. 什么是跨域请求 2.什么是同源策略 3.为什么要设置这种限制 3.1 攻击实例 3.2 攻击原理 4. 怎样取消 ...
- Java中格式化输出
文章目录 一.要点提示 二.常用的格式标识符 三.格式标识符的解释 四.指定宽度和精度的例子 五.格式化输出语法 六.注意的问题 七.应用 一.要点提示 在控制台上显示格式化输出:System.out ...
- 剖析PHP中的输出缓冲
剖析PHP中的输出缓冲 本文按署名·非商业用途·保持一致授权 作者: ,发表于2005年12月24日01时54分 我们先来看一段代码. <?php for ($i=10; $i>0; $ ...
最新文章
- 深入实践Spring Boot3.1 模型设计
- 学会用好 Visual Studio Code
- 程序运行正常,数据库没反应
- 直播 | WWW 2021论文解读:强化学习与互信息驱动的子图神经网络
- Java web—Servlet的请求与响应
- JavaScript中常用的事件代码及实例
- 深度学习优化算法总结
- 计算机科学与技术初级知识,计算机科学与技术专业课程有哪些
- android sqlite 操作类封装,[Android] Sqlite 数据库操做 工具封装类
- 计算机主机图片开机按钮,解决电脑开机按钮无法使用方法
- PHP 图片处理类 错误处理方法:
- Codeforces Round #102 (Div. 1) D Help Shrek and Donkey 2
- 前端多人开发统一代码格式化工具
- Spring jar包下载
- I2C总线协议详解(特点、通信过程、典型I2C时序)
- Android Studio应用Freeline光速编译APK
- 《庄子·杂篇·列御寇第三十二》
- Linux系统编程.NO7——目录操作函数
- runtime 黑魔法
- TGA--数据压缩第二次作业