升级Flask-RESTful和设置对象已不复存在。如何格式化日期?

时间:2016-12-27 00:29:16

标签: python rest datetime flask flask-restful

我需要将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个端点。)

1 个答案:

答案 0 :(得分:0)

现在,您将编码器设置为设置为应用程序配置的cls属性的dict的RESTFUL_JSON属性。

有关如何设置此属性的说明是here