我是 Flask 的新手,目前正在将现有的 WSGI 应用程序转换为通过 Flask 运行,从长远来看,这会让生活变得更轻松。
所有请求都 POST 到特定路由,但是当前应用程序在执行路由之前检查发布数据,以查看是否需要运行请求(即发布数据中提供的标识符是否已存在于我们的数据库中) )。
如果确实存在,则返回 200 代码并“提前”返回 json,并且不采取其他操作;如果不是,应用程序将继续正常路由。
我认为我可以通过调用 before_request() 在正确的点复制活动,但我不确定从 before_request() 返回烧瓶响应对象是否会在此时充分终止请求?或者是否有更好的方法来做到这一点?
注意:我必须将其作为 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() 之后阻止进一步路由?
有没有更好的办法?
根据他们在文件中所说的内容,它应该做你想做的事。
该函数将在没有任何参数的情况下被调用。如果函数返回非 None 值,则将其处理为视图的返回值,并停止进一步的请求处理。(source)
@app.route("/<name>")
def index(name):
return f"hello {name}"
@app.before_request
def thing():
if "john" in request.path:
return "before ran"
使用上面的代码,如果有一个“john”url_path
,我们将看到before ran
在输出中,而不是实际的预期视图。你会看见hello X
对于其他字符串。
所以是的,使用before_request
并返回一些东西,除了None
将阻止烧瓶为您的实际服务view
。你可以redirect
用户或向他们发送适当的响应。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)