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