我正在使用python,tornadoweb和MongoDB构建REST api。 我正在寻找一种简单的方法来处理客户端 - 服务器文档交换,尽可能使用最低的操作和最简单的API。我遇到了将MongoDB的ObjectId序列化和反序列化为JSON以向客户端发送数据或从客户端接收数据的问题。
我知道有两种方法可以解决这个问题:
{"$oid": "..."}
(Unable to deserialize PyMongo ObjectId from JSON)这些解决方案似乎都不可接受,因为:
如果服务器正在发送语法为{"$oid": "..."}
的文档的ID,则当客户端在没有任何修改的情况下发回该ID时,龙卷风的get_argument
功能将无法使用正确处理收到的数据:
> arguments: {'_id[$oid]': ['54f9c7ab834bac1b76846655'], ...}
> POST [...] (127.0.0.1): Missing argument _id
有关如何优雅地处理此问题的任何想法?优雅地说,我的意思是我想以一种最类似的方式处理id,如果id是一个简单的字符串,我会做的。
非常感谢你的帮助。我做了一些研究,我很惊讶我无法找到这个问题的答案,因为MondoDB和龙卷风经常被一起使用。也许我错过了一个关键字来获得解决方案。
答案 0 :(得分:0)
对象ID(可能是整个POST主体)应编码为JSON。在表单编码的主体中没有标准的方法来表示这样的复杂对象。 jQuery使用非标准编码obj[field]=value
,但这并不是普遍支持的,特别是Tornado不支持它。在使用带有Tornado的jQuery时,你应该使用JSON或“传统”模式(虽然传统模式在这里没有帮助,因为它只适用于列表,而不适用于映射)。