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。谢谢我不知道这件事。