Flask Web服务器使用waitress时不触发before_request,仅触发before_app_request

0 投票
1 回答
19 浏览
提问于 2025-04-14 15:45

我之前这个代码是可以正常工作的:

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_appbefore_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

虽然看起来不太好,但确实解决了问题。

撰写回答