27 октября 2012 г.

Изменяем заголовки по умолчанию в имейлах от Flask-Security

Flask-Security - незаменимое расширение, если вам надо быстро и безболезнено реализовать поддержку регистрации, логина, восстановления пароля для вашего Flask приложения.

Однако с ним есть маленькая беда. Дело в том, что все заголовки писем, отправляемых при его помощи захардкожены как строки в коде, а для того или иного приложения есть смысл в замене темы сообщения 'Welcome' на 'Подтвердите ваш аккаунт' и тд.

Благо кастомизация отпарвки сообщений таки была предусмотрена автором, только не думаю, что именно это он имел ввиду, когда добавлял для стейта расширения аттрибут _send_mail_task. Так или иначе, если нам нужно взять и поменять какую-то тему сообщения на новую мы можем сделать это так,

appname/app.py

from flask import Flask
from flask.ext.security import Security

from appname.utils import send_mail


app = Flask('appname')
...
security = Security(app, datastore)
app.extensions['security']._send_mail_task = send_mail

appname/utils.py

from flask import current_app
from flask.ext.babel import gettext as _


def send_mail(message):
    if message.subject == 'Welcome':
        message.subject = _('Confirm your account')

    mail = current_app.extensions['mail']
    mail.send(message)

Совсем не красивое, но рабочее решение. Также я разместил новый тикет на трекере проекта, посмотрим, что скажет автор на мою попытку сделать кастомизацию заголовков более натуральным способом, через задание их в настройках приложения аналогично контекстным сообщениям, которые генерируются Flask-Security.

UPD. Не только меня волновала эта проблема и посему благодаря фиксам Anthony Plunkett в версии 1.5.1 заголовки сообщений от Flask-Security можно задавать в настройках проекта как:

SECURITY_EMAIL_SUBJECT_REGISTER = 'Confirm your account'

Все доступные настройки описаны в документации.

blog comments powered by Disqus