我需要将Flask-RESTful 0.2.5的应用程序更新为0.3.5。
我的API有40多个端点,其中大约25个具有包含日期时间字段的实体。当使用0.2.5时,我遵循this StackOverflow question中提供的优秀,并将以下函数放在我的__init__.py
文件中:
class MyApiJsonEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, (datetime.datetime, datetime.date, datetime.time)):
return obj.isoformat()
elif isinstance(obj, Decimal):
return str(obj)
return json.JSONEncoder.default(self, obj)
flask.ext.restful.representations.json.settings["cls"] = MyApiJsonEncoder
这非常有用。现在升级到0.3.5时,设置对象不再存在。
File ".........../api/__init__.py", line 35, in <module>
flask.ext.restful.representations.json.settings["cls"] = MyApiJsonEncoder
AttributeError: 'module' object has no attribute 'settings'
好的,所以我查看了文档,发现我应该使用@marshal_with
。但这吓到我了!看来我必须进入每个具有日期或日期时间字段的端点,并放入带有@marshal_with
装饰器的字段字典。事实上,这本词典似乎不仅表明我希望我的日期和日期时间为ISO8601格式,而且其他字段也必须用他们的编组首选项指定。
我希望我读错了。
我的问题是:我如何使用Flask-RESTful 0.3.5全局状态,以及非突入,我希望所有日期都以ISO8601格式编组。 (非侵入性地,我的意思是我不想破坏我现有的40个端点。)