gpt4 book ai didi

python - 禁用有关 View 函数未返回响应的 Flask 警告?

转载 作者:行者123 更新时间:2023-12-01 01:50:16 25 4
gpt4 key购买 nike

我正在使用 Flask 开发一个 API,该服务并不意味着渲染任何模板,而只是以 {"message": "message here", "status_code": 200, "data"的形式返回 json :{}}“

我有多个路由,每个路由都会修改附加到 Flask.g 的全局响应对象:

from flask import g

from project import app


@app.route('/users/', methods=["GET"])
def get_users():
...
g.res.data["message"] = "Successfully queried users as specified."
# default g.res.status_code == 200

@app.route('/users/', methods=["POST"])
def post_users():
...
g.res.data["message"] = "Successfully created User."
g.res.status_code = 201

然后,将响应数据返回给用户由 app.after_request 处理:

from flask import g, jsonify

from project import app


@app.after_request
def after_request(response: None):
return jsonify(g.res)

但是,Flask 仍然(正确地)认为 View 函数没有返回响应,因为技术上 View 函数没有返回响应,但 after_request 处理程序是。

我处理响应数据的方法是否存在继承问题?我特意改用 app.after_request 以避免在每个 View 函数末尾重复 return jsonify(g.res)

如果这种方式没有问题,我应该如何禁用这些警告?

编辑:在 Flask.app.make_response 中引发错误,其中响应为 None 和其他转换时引发 ValueError稍后尝试(例如,从 strFlask.Response 对象)。

我可能会直接修改这个文件来处理我的特定用例,直到我找到一种惯用的方法来解决这个问题。

最佳答案

子类化Flask 类并重写make_response 方法。将逻辑从处理程序移至方法中。如果 View 没有返回响应,但 g.res 中有有效数据,则构建响应并返回它,否则遵循默认行为。

class GResFlask(Flask):
def make_response(self, rv):
if not rv and g.res.data:
return jsonify(g.res)
return super().make_response(rv)

app = GResFlask(__name__)

需要注意的是,after_request 处理程序可以通过扩展添加,并且 Flask 提供的接口(interface)意味着它们将期望一个有效的响应对象。因此,您始终希望从 make_response 返回有效的响应。

关于python - 禁用有关 View 函数未返回响应的 Flask 警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50785712/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com