HOWTO · Python
在 Flask 中返回一个有效的 JSON 响应
我们将通过此解释了解 Flask 中的 JSON 支持,我们还将学习如何创建 api 以及如何在 Flask 中的 jsonify() 的帮助下将其返回到 JSON 响应中。
本页内容
通过这个解释,我们将了解 Flask 中的 JSON 支持以及如何在 Flask 中的 jsonify() 的帮助下创建 API 并在 JSON 响应中返回它。
借助 Flask 中的 jsonify() 返回有效的 JSON 响应
在 Flask 中使用 JSON 非常简单,因为 JSON 对象的类型可以映射到 Python 类型,我们可以像访问字典或数组一样访问它。如果你熟悉 JSON 的基础知识,那么你应该能够理解这一点。
现在我们需要设置一个 Flask 应用程序。我们只是做一些基本的事情来创建一个应用程序,然后我们将创建一个单一的路线。
我们将为 Get_Trucks() 方法指定一个根,即装饰器内的 route('truck/api/',methods=['GET'])。在 Get_Trucks() 方法中,我们将声明一个名为 Trucks 的字典列表并直接返回它。
@app.route("truck/api/", methods=["GET"])
def Get_Trucks():
Trucks = [
{"id": 1, "year": 2017, "model": ""},
{"id": 2, "year": 2019, "model": ""},
{"id": 3, "year": 2020, "model": ""},
{"id": 4, "year": 2016, "model": ""},
]
return Trucks
现在,我们来看两种情况:第一种是返回一个对象数组,第二种是只返回一个对象本身或一个字典。
让我们继续看看第二个。除了名为 Truck_Details() 的函数外,代码将相同。
from flask import Flask
app = Flask(__name__)
@app.route("/truck/api/", methods=["GET"])
def Get_Trucks():
Trucks = [
{"id": 1, "year": 2017, "model": ""},
{"id": 2, "year": 2019, "model": ""},
{"id": 3, "year": 2020, "model": ""},
{"id": 4, "year": 2016, "model": ""},
]
return Trucks
@app.route("/truck-details/api/", methods=["GET"])
def Truck_Details():
Details = {"id": 2, "year": 2019, "model": ""}
return Details
if __name__ == "__main__":
app.run(debug=True)
现在,我们将运行 Flask 应用程序并转到浏览器。让我们测试一下这第一条路线。
当我们按下 Enter 时,我们会收到类型错误,我们可以读取 view 函数没有返回有效响应,因为我们正在尝试向浏览器发送 Python 列表。
我们可以通过从 Flask 中再导入一个东西来快速解决这个问题:jsonify()。这是一个内置 Flask;我们不需要使用第三方模块。
我们将转到返回列表或数组的位置,并将其包装在 jsonify() 中。让我们保存它并再次测试我们的路由,现在我们得到了一个有效的 JSON 响应。
如果我们在网络检查器中查看这个,我们可以看到这个应用程序的内容类型是 JSON。
让我们看看不使用 jsonify() 从 Flask 返回单个对象。让我们在浏览器中查看它。
它之所以有效,是因为我们使用的是升级版本。如果你使用 Flask 版本 1.1.0 或更高版本,当它在视图中返回字典时,它会自动将字典转换为 JSON,但如果你的 Flask 版本小于 1.1.0,那么你可以执行与我们返回多个对象所做的相同。
如果我们看右边,我们可以看到内容类型是 JSON,我们只是使用一个名为 JSON 视图的 Chrome 扩展来美化响应数据。
完整源代码:
from flask import Flask, jsonify
app = Flask(__name__)
@app.route("/truck/api/", methods=["GET"])
def Get_Trucks():
Trucks = [
{"id": 1, "year": 2017, "model": ""},
{"id": 2, "year": 2019, "model": ""},
{"id": 3, "year": 2020, "model": ""},
{"id": 4, "year": 2016, "model": ""},
]
return jsonify(Trucks)
@app.route("/truck-details/api/", methods=["GET"])
def Truck_Details():
Details = {"id": 2, "year": 2019, "model": ""}
return Details
if __name__ == "__main__":
app.run(debug=True)