gpt4 book ai didi

flask - 将 Flask 应用实例设置为配置

转载 作者:行者123 更新时间:2023-12-03 16:57:25 25 4
gpt4 key购买 nike

我正在使用带有应用程序工厂的蓝图,因此我无法导入应用程序实例。你们看到设置app有什么问题吗?到你的配置?

def create_app():
app = Flask(__name__)
app.config['app'] = app
with app.app_context():
configure_app(app)
configure_blueprints(app)
...

现在 app可以通过 current_app.config['app'] 从不同的模块访问
app = current_app.config['app']
with app.app_context():
...

这是一个真实的例子:
from flask import current_app

def send_async_email(current_app, msg):
with current_app.app_context():
mail.send(msg)


def send_email(subject, sender, recipients, text_body, html_body):
msg = Message(subject, sender=sender, recipients=recipients)
msg.body = text_body
msg.html = html_body
Thread(target=send_async_email,
args=(current_app.config['app'], msg)).start()

使用 current_app独自在 Thread参数,我收到一个错误,说我在应用程序上下文之外工作。使用 current_app.config['app'] 确实有效,我只想知道是否有不同的方式,或者这样做有什么问题?

最佳答案

那是因为 current_app只是线程本地应用程序的代理。这应该解决它:
app= current_app._get_current_object()
这会将您返回原始应用程序对象。您的配置示例有效,因为它还使用原始应用程序而不是代理。

现在您可以将它传递给您的新线程,如下所示:
Thread(target=send_async_email, args=(app, msg)).start()
话虽如此,将您的应用程序设置为您的 app.config 的一个项目是一个坏主意,因为它是递归的。

关于flask - 将 Flask 应用实例设置为配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52453232/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com