2014-12-07 71 views
1

我试图配置Flask-Security以异步方式发送邮件。使用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 

在烧瓶中,安全文档,它说用@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) 

哪里需要该码被整理与应用工厂上班?

在此先感谢。

回答

0

我能做到这一点,像这样:

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