我正在使用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&cmd=resource&f=style.css"
type="text/css">
... (more lines of data)
答案 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()