一、flask-restful格式化输出字段
Flask-RESTful 提供了一个简单的方式来控制在你的响应中实际呈现什么数据。
使用 fields 模块,你可以使用在你的资源里的任意对象(ORM 模型、定制的类等等)
并且 fields 让你格式化和过滤响应,因此您不必担心暴露内部数据结构。
1、基本用法:装饰方法
from flask.ext.restful import Resource, fields, marshal_with
# 定义输出格式化字段
resource_fields = {
'name': fields.String,
'address': fields.String,
'date_updated': fields.DateTime(dt_format='rfc822'),
}
class Todo(Resource):
# 采用装饰器格式化
@marshal_with(resource_fields, envelope='resource')
# marshal_with 能够在单个对象,字典,或者列表对象上工作。
def get(self, **kwargs):
return db_get_todo() # 返回必须是对象
'''
这个例子假设你有一个自定义的数据库对象(todo),它具有属性:name, address, 以及 date_updated。该对象上任何其它的属性可以被认为是私有的不会在输出中呈现出来。
一个可选的 envelope 关键字参数被指定为封装结果输出。
'''
2、响应重命名属性
很多时候你面向公众的字段名称是不同于内部的属性名。使用 attribute 可以配置这种映射。
fields = {
'name': fields.String(attribute='private_name'),
'address': fields.String,
}
lambda 也能在 attribute 中使用
fields = {
'name': fields.String(attribute=lambda x: x._private_name),
'address': fields.String,
}
3、返回默认值
如果由于某种原因你的数据对象中并没有你定义的字段列表中的属性,你可以指定一个默认值而不是返回 None。
fields = {
'name': fields.String(default='Anonymous User'),
'address': fields.String,
}
4、自定义字段&多个值
当一个属性存储多条信息的时候是特别有用的。
class