最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

【已解决】Flask中实现rest的api去返回典型格式的json数据

Flask crifan 5841浏览 0评论

折腾:

【已解决】CentOS服务器中搭建Python的Flask的REST API

期间,需要接着去开发Flask,实现一个基本的,标准的,rest api

输入:一段字符串,问题

输出:一个json格式的响应,包括一个答案的字符串和可能有的音频文件地址的字符串

总体上是:

  • Request

    • GET: /qa

      • q=play a Christmas song

  • Response

    • {

    •   “code”: 200,

    •   “message”: “generate answer ok”,

    •   “data”: {

    •     “answer”: “Following will play the Christmas song: Jingle Bells …”,

    •     “audio” : {

    •       “contentType” : “audio/mpeg”,

    •       “name”: “Jingle Bells.mp3”,

    •       “url” : “http://1.2.3.4/a/b/c.mp3”

    •     }

    •   }

    • }

现在先去要返回json格式的字符串

flask return json

Flask设置返回json格式数据 – Penguin

去试试最后的force_type

<code>from flask import Flask
from flask import Response, jsonify


class AutoJsonifyResponse(Response):
    @classmethod
    def force_type(cls, response, environ=None):
        if isinstance(response, (list, dict)):
            response = jsonify(response)
        return super(Response, cls).force_type(response, environ)


app = Flask(__name__)
app.response_class = AutoJsonifyResponse


@app.route("/qa")
def answerQuestion():
    respDict = {
        "code": 200,
        "message": "generate answer ok",
        "data": {
            "answer": "Following will play the Chrismas song: Jingle Bells ...",
            "audio": {
                "contentType": "audio/mpeg",
                "name": "Jingle Bells.mp3",
                "url": "http://1.2.3.4/a/b/c.mp3"
            }
        }
    }

    return respDict


if __name__ == "__main__":
    app.debug = True
    app.run()
</code>

效果:

但是此处发现没有返回content-type:application/json

不过发现Chrome中可以看到response的header中的content-type的:

后来发现,PyCharm的Rest Client中也可以看到response headers中有:

Content-Type: application/json

Flask返回json两种方式 | 码农想种地

在flask中使用jsonify和json.dumps的区别 – CSDN博客

“jsonify的作用实际上就是将我们传入的json形式数据序列化成为json字符串,作为响应的body,并且设置响应的Content-Type为application/json,构造出响应返回至客户端。”

为代码更简洁,且目前基本够用的话,还是参考:

https://www.polarxiong.com/archives/Flask%E8%AE%BE%E7%BD%AE%E8%BF%94%E5%9B%9Ejson%E6%A0%BC%E5%BC%8F.html

直接用jsonify吧

python – Return JSON response from Flask view – Stack Overflow

【总结】

此处,为了简单,且够用 的情况下,直接用jsonify即可返回json:

<code>from flask import Flask
from flask import jsonify


app = Flask(__name__)


@app.route("/qa")
def answerQuestion():
    respDict = {
        "code": 200,
        "message": "generate answer ok",
        "data": {
            "answer": "Following will play the Chrismas song: Jingle Bells ...",
            "audio": {
                "contentType": "audio/mpeg",
                "name": "Jingle Bells.mp3",
                "url": "http://1.2.3.4/a/b/c.mp3"
            }
        }
    }

    return jsonify(respDict)


if __name__ == "__main__":
    app.debug = True
    app.run()
</code>

也是可以的,可以的:

转载请注明:在路上 » 【已解决】Flask中实现rest的api去返回典型格式的json数据

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
82 queries in 0.190 seconds, using 22.25MB memory