Flask的before_first_request属性不存在

AttributeError: 'Flask' object has no attribute 'before_first_request'.
我在运行Flask的时候想在第一次请求前执行(使用了钩子函数),但是如题,它报错说这个属性不存在

# 从flask引入Flask
from flask import Flask
# 使用Flask类创建一个app对象
app = Flask(__name__)
# 第一次启动时处理
@app.before_first_request
def before_first_request():
    pass
# 默认页面
@app.route("/")
def index():
    return "yes"
# 开始运行,DEBUG模式
if __name__ == "__main__":
    app.run(host="127.0.0.1", port=80, debug=True)

报错信息:

@app.before_first_request
AttributeError: 'Flask' object has no attribute 'before_first_request'. 
Did you mean: '_got_first_request'?

Flask版本是2.3.2
Python版本是3.10
求解决

问题点:版本差异(flask2.3 版本之后 before_first_request被移除)
解决办法:
在flask2.3版本之后,该装饰器的功能在创建应用时运行,无需手动添加该装饰器

flask升级一下,用最新版的flask,pip install --upgrade Flask,不升级就改成,改为:

@app.before_request
def before_first_request():
    if not app.config['APP_ALREADY_STARTED']:
        # 在第一个请求时执行代码
        app.config['APP_ALREADY_STARTED'] = True

在代码中,我们将 before_first_request 更改为 before_request,并添加了一个变量 APP_ALREADY_STARTED。这个变量用来标记已经启动过应用程序,避免重复执行代码。

在应用程序启动时,你需要初始化 APP_ALREADY_STARTED 变量,以避免在重启应用程序时重新执行代码:

if __name__ == '__main__':
    app.config['APP_ALREADY_STARTED'] = False   # 初始化变量
    app.run()

根据提供的代码和错误信息,问题出在使用了错误的装饰器名称@app.before_first_request。应该使用@app.before_first_request而不是@app.before_first_requst

请将代码中的@app.before_first_requst改为@app.before_first_request,然后重新运行Flask应用程序。这样应该可以解决该错误。修改后的代码如下:

# 从flask引入Flask
from flask import Flask
# 使用Flask类创建一个app对象
app = Flask(__name__)
# 第一次启动时处理
@app.before_first_request
def before_first_request():
    pass
# 默认页面
@app.route("/")
def index():
    return "yes"
# 开始运行,DEBUG模式
if __name__ == "__main__":
    app.run(host="127.0.0.1", port=80, debug=True)

还可以尝试重新安装Flask库,以确保安装没有出现问题。可以使用以下命令重新安装Flask:

pip uninstall flask
pip install flask