Flask的jsonify函数与flask-marshmallow不一致

4

我正在使用flask-RESTful开发一个API,但在使用Flask的jsonify函数时遇到了问题。我正在使用flask-marshmallow进行JSON序列化。以下是一个非常简化的代码片段:

result = activities_schema.dump(activities)
return jsonify(result)

本地环境下,端点将返回具有“数据”和“错误”键的json;然而,在Linux服务器上运行时,返回一个包含列表和字典的结果,没有“数据”和“错误”键。
我已经确定这种不一致性是由Flask的jsonify函数引起的,通过在API返回结果之前打印出结果来确认。无论是本地还是服务器上,“result”的值都相同:
MarshalResult(data=[], errors={})

然而,当我使用Flask的jsonify后打印响应时,本地我得到的结果是这样的:

('{\n  "data": [], \n  "errors": {}\n}', '\n')

在服务器上打印出以下内容:

('[\n  [], \n  {}\n]', '\n')

有人知道为什么这些不匹配吗?


请仔细检查实际环境和本地环境中的Marshmallow版本是否相同。自从Marshmallow >= 3以来,模式始终是严格的升级说明 - el.atomo
两者都使用Marshmallow==2.15,但很高兴知道v3.0正在进行改变。 - rwal
1个回答

3

我做了更多的研究,并找到了一个解决问题的方法(感觉有点傻,因为解决方案就在文档中),但无法解释原始问题发生的原因。

解决方案(在这里找到)是使用以下两种方式之一:

jsonify(result.data)

或者:

activities_schema.jsonify(result)

无论使用哪种方法,都只会返回数据而不包含错误信息。

我仍然无法解释为什么以另一种方式执行时服务器和我的本地计算机之间存在不一致性,但也许这是一个不同的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接