我正在尝试使用Flask构建一个简单的API,我现在想要阅读一些POSTed JSON . 我使用PostMan Chrome extension发布帖子,而我发布的JSON只是 {"text":"lalala"}
. 我尝试使用以下方法读取JSON:
@app.route('/api/add_message/<uuid>', methods=['GET', 'POST'])
def add_message(uuid):
content = request.json
print content
return uuid
在浏览器上它正确地返回我放入GET的uuid,但是在控制台上,它只打印出 None
(我希望它打印出 {"text":"lalala"}
. 有人知道如何从Flask方法中获取发布的JSON ?
4 回答
您需要将请求内容类型设置为
application/json
才能使.json
属性生效;否则它将是None
. 见Flask Request documentation:Flask 0.10添加了request.get_json() method,您应该使用该方法而不是
.json
属性 . 您可以通过设置force=True
来告诉方法跳过内容类型要求 .请注意,如果此时引发异常(可能导致400 Bad Request响应),则JSON数据无效 . 它在某种程度上是畸形的;您可能想要使用JSON验证器进行检查 .
作为参考,这里有关于如何从Python客户端发送json的完整代码:
"json="输入将自动设置内容类型,如下所述:Post JSON using Python Requests
以上客户端将使用此服务器端代码:
这就是我应该这样做的方式
设置
silent=True
时,get_json
函数在尝试检索json正文时将无提示失败 . 默认情况下,它设置为False
.设置
force=True
将忽略烧瓶为您执行的request.headers.get('Content-Type') == 'application/json'
检查 . 默认情况下,它也设置为False
.见flask documentation .
我强烈建议离开
force=False
并让客户端发送Content-Type
标头以使其更明确 .希望这可以帮助!
该解决方案有效: