Python Eve - 包含列表的POST有效负载

时间:2015-09-08 11:19:33

标签: python eve

我的架构中遇到list类型的问题。每当我尝试发布POST时,我都会收到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()

然后当您使用以下内容POST到人员终端时:

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测试中可以看到,这似乎是提出请求的正确方法,所以我只能假设我在设置资源/模式时犯了错误?

感谢。

1 个答案:

答案 0 :(得分:1)

如果您打印request.POST,则会看到UnicodeMultiDict([('tests', u'a'), ('tests', u'b')])。修复此问题的方法是json object使用post

person = json.dumps({
    "tests": ['a', 'b'],
})

r = requests.post(url, json=person)
print(r.json())

或者在您的情况下,您将不得不以某种方式在API端调整您的POST请求以获得列表: - request.POST.getall('tests')然后继续。

请检查using json in POST request。使用json时,可能不需要json.dumps,字典将自动jsonified