Flask Restful-无法看到json帖子的输出

时间:2019-03-29 09:36:46

标签: python json flask

我正在使用flask创建api服务器,该服务器获取json数据。 我使用了以下this教程来创建代码: 从烧瓶进口烧瓶 从烧瓶导入请求中

app = Flask(__name__)

@app.route('/postjson', methods = ['POST'])
def postJsonHandler():
    print (request.is_json)
    content = request.get_json()
    print (content)
    return 'JSON posted'

app.run(host='0.0.0.0')

当我跑步时:

curl -X POST http://127.0.0.1:5000/postjson -H "Content-type: application/json" -d '{ "data": { "url": "https://google.com" }}'

我只看到"JSON posted",没有任何印刷。为什么看不到任何数据? 我也尝试使用POSTMAN,但结果相同。

我还在指南示例中尝试了json:

{ 
 "device":"TemperatureSensor", 
 "value":"20", 
 "timestamp":"25/01/2017 10:10:05" 
}

也一样。

当我尝试以下代码时,

编辑-作为@TomMP答案:

from flask import Flask
from flask import request

app = Flask(__name__)

@app.route('/producer', methods = ['POST'])
def postJsonHandler():
    print (request.is_json)
    content = request.get_json()
    print (content)
    return request.get_json()
    #return 'JSON posted'

app.run(host='0.0.0.0')

我得到:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<title>500 Internal Server Error</title>
<h1>Internal Server Error</h1>
<p>The server encountered an internal error and was unable to complete your request. Either the server is overloaded or there is an error in the application.</p>

当我尝试调试模式时,我得到:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  "http://www.w3.org/TR/html4/loose.dtd">
<html>
  <head>
    <title>TypeError: 'dict' object is not callable
The view function did not return a valid response. The return type must be a string, tuple, Response instance, or WSGI callable, but it was a dict. // Werkzeug Debugger</title>
    <link rel="stylesheet" href="?__debugger__=yes&amp;cmd=resource&amp;f=style.css"
        type="text/css">
... (more lines of data)

3 个答案:

答案 0 :(得分:1)

那是因为您仅返回文本“ JSON发布”
所以返回你想要的东西
像json响应:

return jsonify({'status': 0, 'msg': 'success'})

细节

from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route('/postjson', methods = ['POST'])
def postJsonHandler():
    content = request.json
    print(content)
    return jsonify(content)

app.run(host='0.0.0.0')

通话示例:

requests.post('http://0.0.0.0:5000/postjson', json={'a':'b'}).json()

答案 1 :(得分:0)

使用print()时,它只会将所有内容打印到控制台,因此请在运行应用程序时对其进行检查以查看打印输出。从视图中返回的内容(“ JSON发布”)是作为响应发送回客户端的内容。

答案 2 :(得分:0)

使用curl访问路线时,只会显示该路线返回的内容-在这种情况下为JSON posted。它不会显示介于两者之间的打印语句。您可以尝试和run flask in debug mode。那应该打印到运行该应用程序的控制台。

编辑:为明确起见,您仍然不会收到作为答复请求发送的数据,即在邮递员中。为此,您必须使用return request.get_json()

在函数末尾返回数据