为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

凤凰求蛊 2021-12-21 16:44:34
我正在使用烧瓶来创建 api 服务器,它获取 json 数据的帖子。我使用以下本教程来创建代码: from flask import Flask from flask import requestapp = 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:{  &quot;device&quot;:&quot;TemperatureSensor&quot;,  &quot;value&quot;:&quot;20&quot;,  &quot;timestamp&quot;:&quot;25/01/2017 10:10:05&quot; }也一样。编辑-作为@TomMP 回答,当我尝试以下代码时:from flask import Flaskfrom flask import requestapp = 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 callableThe 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 回答

?
红糖糍粑

TA贡献1815条经验 获得超6个赞

那是因为你只返回文本 'JSON Posted'

所以返回你想要得到的

像 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()


查看完整回答
反对 回复 2021-12-21
?
阿晨1998

TA贡献2037条经验 获得超6个赞

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


查看完整回答
反对 回复 2021-12-21
?
慕斯709654

TA贡献1840条经验 获得超5个赞

当您使用curl访问路由时,它只会向您显示该路由返回的内容 - 在这种情况下,即JSON posted. 它不会向您显示介于两者之间的打印语句。您可以尝试在调试模式下运行烧瓶。这应该打印到您运行此应用程序的控制台。

编辑:需要明确的是,您仍然不会收到作为对请求的答复发送的数据,即在 Postman 中。为此,您必须在函数结束时使用return request.get_json()


查看完整回答
反对 回复 2021-12-21
  • 3 回答
  • 0 关注
  • 189 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信