Python Eve-包含列表的POST有效负载
我的模式中的Python Eve-包含列表的POST有效负载,python,eve,Python,Eve,我的模式中的列表类型有问题。每当我试图发帖时,都会收到422条回复,说明“必须是列表类型”。下面是产生此问题的一个简单示例 from eve import Eve people = { 'schema': { 'tests': { 'type': 'list', 'schema': { 'type': 'string' }, 'required
列表
类型有问题。每当我试图发帖时,都会收到422条回复,说明“必须是列表类型”。下面是产生此问题的一个简单示例
from eve import Eve
people = {
'schema': {
'tests': {
'type': 'list',
'schema': {
'type': 'string'
},
'required': True,
}
},
'resource_methods': ['GET', 'POST'],
}
settings = {
'DOMAIN': {
'people': people
}
}
app = Eve(settings=settings)
if __name__ == '__main__':
app.run()
然后,当您使用以下内容发布到people端点时:
import requests
url = "http://localhost:5000/people"
person = {
"tests": ['a', 'b'],
}
r = requests.post(url, data=person)
print(r.json())
你得到422的回复。当我调试它时,Eve应用程序似乎接收到了tests
参数,它只是一个字符串,'a'
,而不是整个列表。从我在GitHub上的Eve测试中看到的情况来看,这似乎是发出请求的正确方式,因此我只能假设我在设置资源/模式时犯了错误
谢谢。如果您打印
请求。POST
,您将看到UnicodeMultiDict([('tests',u'a'),('tests',u'b'))
。解决这个问题的方法是为您的post
使用json对象
person = json.dumps({
"tests": ['a', 'b'],
})
r = requests.post(url, json=person)
print(r.json())
或者在您的情况下,您必须在API端调整POST请求,以获得如下列表:-
request.POST.getall('tests')
然后继续
请查收。另外,在使用json
时,可能不需要json.dumps,字典将自动jsonified
啊,行得通,谢谢。我没有意识到请求中有一个json
参数。我已经尝试了data=json.dumps(payload)
,它给出了400个错误。现在看一下,我认为它们是等效的。可能我应该在答案中添加此链接。我发现原因json=person
在data=json的地方起作用。dumps(person)
不起作用,因为json关键字参数还将请求头更改为application/json
,手动转储没有的地方。@AndrewWalker Ok。谢谢我不知道这件事。