【问题标题】:Sending async email with Flask-Security使用 Flask-Security 发送异步电子邮件
【发布时间】:2015-02-05 08:36:32
【问题描述】:

我正在尝试将 Flask-Security 配置为异步发送电子邮件。

我有一些通过 Flask-Mail 发送异步电子邮件的代码,但是我无法将它与我的应用程序工厂功能集成,以便它与 Flask-Security 结合使用。

应用工厂:

mail = Mail()
db = SQLAlchemy()
security = Security()

from app.models import User, Role
user_datastore = SQLAlchemyUserDatastore(db, User, Role)

def create_app(config_name):
    # Config
    app = Flask(__name__)
    app.config.from_object(config[config_name])
    config[config_name].init_app(app)

    # Initialize extensions
    mail.init_app(app)
    db.init_app(app)
    security.init_app(app, user_datastore)

    return app

在 Flask-Security 文档中,它说使用 @security.send_mail_task 覆盖扩展程序发送电子邮件的方式。

那么我到底在哪里实现这个装饰器呢?好像我把它放在应用程序工厂的任何地方,我都会得到循环导入。

这些是我尝试使用的异步电子邮件功能,取自this issue

@async
def send_security_email(msg):
    with app.app_context():
       mail.send(msg)

@security.send_mail_task
def async_security_email(msg):
    send_security_email(msg)

此代码需要放在哪里才能与应用工厂一起工作?

提前致谢。

【问题讨论】:

    标签: asynchronous flask flask-security flask-mail


    【解决方案1】:

    我能够做到这一点:

    mail = Mail()
    db = SQLAlchemy()
    security = Security()
    
    from app.models import User, Role
    user_datastore = SQLAlchemyUserDatastore(db, User, Role)
    
    def create_app(config_name):
        # Config
        app = Flask(__name__)
        app.config.from_object(config[config_name])
        config[config_name].init_app(app)
    
        # Initialize extensions
        mail.init_app(app)
        db.init_app(app)
        security_ctx = security.init_app(app, user_datastore)
    
        # Send Flask-Security emails asynchronously
        @security_ctx.send_mail_task
        def async_security_email(msg):
            send_security_email(app, mail, msg)
    
        return app
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-01
      • 1970-01-01
      • 2011-05-06
      相关资源
      最近更新 更多