我尝试为我的资源实现put处理程序。这是代码:
class Settings(restful.Resource):
def put(self):
settings = request.form['settings']
print settings
以下是我将数据放在那里的方法:
import requests
url='http://localhost:8000/settings'
data = {'settings': {
'record': {
'b': 'ok',
'c': 20,
'd': 60,
},
'b': {
'c': {
'd': 3,
'e': 2,
'f': 2,
},
'd': 5,
'a': 'voice',
'k': {
'l': 11.0,
'm': 23.0,
},
}
}
}
requests.put(url, data)
当我这样做时,我的控制台中只打印出record
,所以当我进行验证时,它会因为数据不是字典而失败。我无法弄清楚出了什么问题。
它看起来与Flask-RESTful Quickstart中的代码相同,如果我说得对,requests
适用于字典。
答案 0 :(得分:2)
当您将字典作为data
参数传入时,requests
将数据编码为“application / x-www-form-urlencoded”,就像浏览器表单一样。此编码格式不支持超出(有序的,非唯一的)键值序列的结构化数据。
请勿使用application/x-www-form-urlencoded
发布结构化数据。改为使用JSON:
import json
# ...
requests.put(url, json.dumps(data), headers={'Content-Type': 'application/json'})
然后在Flask中使用request.get_json()
再次加载有效负载:
class Settings(restful.Resource):
def put(self):
settings = request.get_json()['settings']
print settings
如果您使用的是requests
版本2.4.2或更高版本,您也可以将JSON编码保留到requests
库;只需将data
对象作为json
关键字参数传入;也将设置正确的Content-Type标头:
requests.put(url, json=data)
请注意,您无需亲自致电json.dumps()
。