Flask Web服务器使用waitress时不触发before_request,仅触发before_app_request
我之前这个代码是可以正常工作的:
auth.py
bp = Blueprint("auth", __name__)
@bp.before_app_request
def validate_token():
# code
session["user"] = user
index.py
@bp.route("/user")
def get_user():
return make_response(session["user"], 200)
但是,在我给这个应用添加测试后,before_app_request
这个函数会被调用,而测试代理并没有经过身份验证(而且也不应该),这就导致了错误。把它改成 before_request
似乎解决了这个问题。实际上,当我用 flask --app app_name run --debug
运行时,一切都很好。然而,当我用 waitress 部署到生产环境时,运行 waitress-serve --port 8081 --host 0.0.0.0 --call app_name:create_app
,before_request
却从来没有被调用,这就导致了错误。
1 个回答
0
供以后参考:before_request
是在每次请求在蓝图内部被调用的。为了修复我的错误,我需要保留 before_app_request
,并检查应用配置中的 "testing" 是否为 true
:
from flask import current_app as app
@bp.before_app_request
def validate_token():
if app.testing:
return
#code
虽然看起来不太好,但确实解决了问题。