2014-12-07 2 views
1

Я пытаюсь настроить Flask-Security для отправки асинхронного сообщения.Отправка async-email с 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 говорится использовать @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