猿问

Flask restful - 看不到 json 帖子的输出

我正在使用烧瓶来创建 api 服务器,它获取 json 数据的帖子。我使用以下本教程来创建代码: from flask import Flask from flask import request


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)


凤凰求蛊
浏览 190回答 3
3回答

红糖糍粑

那是因为你只返回文本 'JSON Posted'所以返回你想要得到的像 json 响应:return jsonify({'status': 0, 'msg': 'success'})细节from flask import Flask, request, jsonifyapp = Flask(__name__)@app.route('/postjson', methods = ['POST'])def postJsonHandler():&nbsp; &nbsp; content = request.json&nbsp; &nbsp; print(content)&nbsp; &nbsp; return jsonify(content)app.run(host='0.0.0.0')调用示例:requests.post('http://0.0.0.0:5000/postjson', json={'a':'b'}).json()

阿晨1998

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

慕斯709654

当您使用curl访问路由时,它只会向您显示该路由返回的内容 - 在这种情况下,即JSON posted.&nbsp;它不会向您显示介于两者之间的打印语句。您可以尝试在调试模式下运行烧瓶。这应该打印到您运行此应用程序的控制台。编辑:需要明确的是,您仍然不会收到作为对请求的答复发送的数据,即在 Postman 中。为此,您必须在函数结束时使用return request.get_json()
随时随地看视频慕课网APP

相关分类

Python
我要回答