我是flask的新手,目前正在将现有的WSGI应用程序转换为长期运行flask,这将使生活更轻松。
所有请求都是针对特定路由的 POST,但是当前应用程序在执行路由之前检查 post 数据,以查看是否需要运行该请求(即,post 数据中提供的标识符是否已经存在于我们的数据库中) )。
如果确实存在 200 代码并且“早期”返回 json 并且不采取其他操作;如果不是,应用程序将继续正常路由。
我想我可以通过调用 before_request() 在正确的点复制活动,但我不确定从 before_request() 返回一个flask Response对象是否会在那时充分终止请求?或者如果有更好的方法来做到这一点?
注意:我必须将其作为 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)
Run Code Online (Sandbox Code Playgroud)
这应该工作(返回并防止进一步路由)?
如果不是,如何在调用 before_request() 后阻止进一步路由?
有没有更好的办法?
根据他们在文件中所说的,它应该做你想让它做的事情。
该函数将在没有任何参数的情况下被调用。如果该函数返回一个非 None 值,则将其作为视图的返回值进行处理,并停止进一步的请求处理。 (来源)
@app.route("/<name>")
def index(name):
return f"hello {name}"
@app.before_request
def thing():
if "john" in request.path:
return "before ran"
Run Code Online (Sandbox Code Playgroud)
使用上面的代码,如果 中有“john” url_path,我们将before ran在输出中看到,而不是实际预期的视图。你会看到hello X其他字符串。所以是的,使用before_request和返回一些东西,除了None会阻止烧瓶为您的实际view. 您可以redirect向用户发送或向他们发送正确的响应。
| 归档时间: |
|
| 查看次数: |
4310 次 |
| 最近记录: |