我试图在 Flask 应用程序运行时运行 init 函数。 这是
server.py
:
from .parser import Parser
app = Flask(config().get("FLASK_APP"))
parser = None
@app.before_first_request
def init():
parser = Parser()
这是
wsgi.py
:
import logging
from src.utils.config import config
host = config().get("FLASK_HOST")
port = config().get("FLASK_PORT")
env = config().get("FLASK_ENV")
is_dev = env == "dev"
logging.basicConfig(
format='[%(asctime)s][%(levelname)s][%(message)s]',
level=logging.INFO if is_dev else logging.WARNING,
datefmt='%Y-%m-%d %H:%M:%S'
)
from src.api.server import app
if __name__ == '__main__':
app.run(
host=host,
port=port,
debug=is_dev,
threaded=True
)
我收到错误
AttributeError: 'Flask' object has no attribute 'before_first_request'
。
当我像这样运行 server.py
时:
from .parser import Parser
app = Flask(config().get("FLASK_APP"))
parser = Parser()
解析器运行两次。
我正在使用 Flask 3.0.0,因为我发现这个装饰器已被弃用。 Flask 3.0.0版本还有其他解决方案吗?
我检查了 Flask 文档,但没有找到
before_first_request
装饰器的任何替代品。
突然我找到了解决办法。我看到的问题出在烧瓶的重新加载器中,所以我只是在 app.run bootstrap 函数中禁用了此功能。 这是肖恩回答的详细信息https://stackoverflow.com/a/9476701/11988818 目前,我的应用程序运行一次。并且不再需要
before_first_request
装饰器了。