我使用flaskeve为我的数据提供一个API。我想用Eve插入我的记录,这样我就得到了一个由Eve创建的属性和另一个Eve添加的属性。在
我的两个字段是dicts,一个是list。当我试图把它插入到Eve中时,结构似乎变平了,丢失了一些信息。试图告诉Eve dict&list元素会给我一个POST错误,说那些字段必须是dict和list,但它们已经是了!有人能帮我说说我做错了什么吗?在
我的Eve配置是这样的:
'myendpoint': { 'allow_unknown': True,
'schema': { 'JobTitle': { 'type': 'string',
'required': True,
'empty': False,
'minlength': 3,
'maxlength': 99 },
'JobDescription': { 'type': 'string',
'required': True,
'empty': False,
'minlength': 32,
'maxlength': 102400 },
},
},
但当我使用请求发布以下结构时:
^{pr2}$post行如下所示:
resp = requests.post(url, data = job)
它会变得“扁平化”,并丢失来自dicts和list的信息:
{
"_id" : ObjectId("56e83f5a6dbf9a6395ea559d"),
"Salary" : "OtherPay",
"_updated" : ISODate("2016-03-15T16:59:06Z"),
"ContactPhone" : "xx",
"JobTypeCodeList" : "Public Sector",
"CompanyName" : "Scc",
"url" : "xxx",
"JobTitle" : "xx",
"WebAdID" : "TA7494725_1_1",
"JobDescription" : "xxx",
"JobLocation" : "DisplayCity",
"CustomField1" : "Permanent",
"_created" : ISODate("2016-03-15T16:59:06Z"),
"CustomField3" : "FTJOBUKNCSG",
"_etag" : "55d8d394141652f5dc2892a900aa450403a63d10",
"JobType" : "Full",
"ProductID" : "JCPRI0UK"
}
我试着更新我的模式,说有些是dicts和list:
'JobTypeCodeList': { 'type': 'list'},
'Salary': { 'type': 'dict'},
'JobLocation': { 'type': 'dict'},
但当我在新唱片上贴出一个错误
{u'Salary': u'must be of dict type', u'JobTypeCodeList': u'must be of list type', u'JobLocation': u'must be of dict type'},
我在发帖之前已经证实了type(job.Salary) == dict
等等,所以我不确定如何解决这个问题。虽然我可以绕过Eve直接将记录发布到MongoDB ok中,但如果可能的话,我更喜欢使用Eve。在
如果这对其他人有用,我最终解决了这个问题,在Eve中发布了一个平面结构,然后使用on_insert和on_update事件循环遍历键并从中构造对象(和列表)。在
它有点复杂,但它能做到这一点,现在它已经就位,使用起来相当透明。我通过Eve添加到MongoDB的对象现在有了嵌入的列表和散列,但是它们也获得了方便的Eve属性,比如_created和_updated,而POST和PATCH请求也通过Eve的正常模式进行验证。在
唯一令人尴尬的是on_insert和on_update发送的参数略有不同,因此在下面的代码中有很多重复,我还没有对其进行重构。在
任何字符都可以用作标志:我使用两个下划线来表示应该作为单个对象结束的键/值,使用两个和号表示应该拆分为一个列表的值。我现在发布的结构如下:
我的Eve模式也相应地进行了更新,以验证这些新键名的值。然后在后端,我定义了下面的函数,该函数检查传入的键/值并将其转换为对象/列表,同时删除原始的和&;数据:
^{pr2}$然后我告诉Eve在插入和更新该集合时运行该函数:
这就实现了我所需要的,并且Mongo中的结果记录与上面问题中的记录相同(具有\u created和\u updated属性)。这显然不太理想,但它已经达到了,而且一旦安装到位,使用起来相当容易。在
相关问题 更多 >
编程相关推荐