Flask: 如何使用 jsonify 改变状态码并返回 Response?

6 浏览
0 Comments

Flask: 如何使用 jsonify 改变状态码并返回 Response?

在我的Flask应用程序中,我想将响应存储在MongoDB中。

如果存储任务无法完成,我想更改状态代码和响应数据。如何更改响应对象的状态代码?

这是一个使用Python 3.6开发的Flask应用程序。

@after_request()
def after_request(response):
    data = response.get_json(silent=True)
    session_id = uuid.uuid4().hex
    if response.status_code == 200 and "results" in data:
        try:
            collection = utils.mongodb_connection(db_info)
            insertion = utils.insert_in_mongo(collection, data["results"], session_id)
            data["report_id"] = insertion.get("id",None)
            return jsonify(data)
        except Exception as e:
            data["message"] = "存储数据时出错"
            response.status_code = 413
    return jsonify(data)

目前,如果出现异常,我会收到状态码200。

0
0 Comments

Flask中使用jsonify返回Response时如何更改状态代码?

在Flask中,可以使用make_response方法来改变状态代码。代码如下:

from flask import make_response
@app.route('/')
def hello():
    data = {'hello': 'world'}
    return make_response(jsonify(data), 403)

直接使用`jsonify(data), 403`会生成类似于`(, 403)`的结果(对象长度仅作为示例)。可以看到,响应对象的状态代码被设置为200。

你有检查过吗?我的意思是,实际上我使用的是`jsonify(status="created"), 201`,而它从未报告为200作为HTTP返回代码。"对象长度仅作为示例"告诉我你只是猜测的。

由于`make_response()`自带了jsonify功能,所以`return make_response(data, 403)`就足够了。

我试过了,Zobayer是对的。你也是对的,我用Postman检查过,403优先于jsonify的200。但是在返回之前尝试打印/记录响应,如`print(jsonify(data))`,你会看到``的结果。你可以使用`print(jsonify(data).__dict__)`来查看内部细节。

以上是解决Flask中使用jsonify返回Response时更改状态代码的方法。

0