gpt4 book ai didi

python-3.x - 从 flask 中的 before_request() 返回

转载 作者:行者123 更新时间:2023-12-04 00:30:27 26 4
gpt4 key购买 nike

我是 flask 的新手,目前正在将现有的 WSGI 应用程序转换为长期运行 flask ,这将使生活更轻松。

所有请求都是针对特定路由的 POST,但是当前应用程序在执行路由之前检查 post 数据,以查看是否需要运行该请求(即,post 数据中提供的标识符是否已经存在于我们的数据库中) )。

如果确实存在 200 代码并且“早期”返回 json 并且不采取其他操作;如果不是,应用程序将继续正常路由。

我想我可以通过调用 before_request() 在正确的点复制事件,但我不确定从 before_request() 返回一个 flask 响应对象是否会在那时充分终止请求?或者如果有更好的方法来做到这一点?

注意:我必须将此作为 200 返回 - 我看到的其他示例导致重定向或 4xx 错误处理(因为与此事件非常相似的是身份验证),所以最终我在 before_request() 结束时执行此操作:

    if check_request_in_progress(post_data) is True:
response = jsonify({'request_status': 'already_running'})
response.status_code = 200
return response
else:
add_to_requests_in_progress(post_data)

这应该工作(返回并防止进一步路由)?

如果不是,如何在调用 before_request() 后阻止进一步路由?

有没有更好的办法?

最佳答案

根据他们在文件中所说的,它应该做你想让它做的事情。

The function will be called without any arguments. If the function returns a non-None value, it’s handled as if it was the return value from the view and further request handling is stopped. (source)


@app.route("/<name>")
def index(name):
return f"hello {name}"

@app.before_request
def thing():
if "john" in request.path:
return "before ran"

用上面的代码,如果 url_path中有一个“john” ,我们将看到 before ran在输出中,而不是实际的预期 View 。你会看到 hello X对于其他字符串。
所以是的,使用 before_request并返回一些东西,除了 None 之外的任何东西将停止 flask 为您的实际服务 view .您可以 redirect用户或向他们发送正确的响应。

关于python-3.x - 从 flask 中的 before_request() 返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51947341/

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