自定义django-otp电子邮件模板

9jyewag0  于 2023-11-20  发布在  Go
关注(0)|答案(1)|浏览(184)

我在我的Django应用程序中使用 * django-otp * 包进行双因素身份验证(2FA)。我想向用户发送我的自定义电子邮件。我按照官方文档添加了我的自定义设置,如下所示:

# django-otp template
OTP_EMAIL_SUBJECT = _('Please confirm your login attempt')
OTP_EMAIL_BODY_TEMPLATE_PATH = 'account/email/login_confirmation_otp.html'

字符串
上述设置正在工作,它的文本/纯内容类型发送电子邮件,但我想要的文本/html内容类型。
以下代码正在发送电子邮件:

def generate_challenge(self, extra_context=None):
    """
    Generates a random token and emails it to the user.

    :param extra_context: Additional context variables for rendering the
        email template.
    :type extra_context: dict

    """
    self.generate_token(valid_secs=settings.OTP_EMAIL_TOKEN_VALIDITY)

    context = {'token': self.token, **(extra_context or {})}
    if settings.OTP_EMAIL_BODY_TEMPLATE:
        body = Template(settings.OTP_EMAIL_BODY_TEMPLATE).render(Context(context))
    else:
        body = get_template(settings.OTP_EMAIL_BODY_TEMPLATE_PATH).render(context)

    send_mail(settings.OTP_EMAIL_SUBJECT,
              body,
              settings.OTP_EMAIL_SENDER,
              [self.email or self.user.email])

    message = "sent by email"

    return message


django_otp/plugins/otp_email/models.py中,我想覆盖generate_challenge()函数,并在 send_email() 函数中添加 html_message,但不知道如何操作?

ddarikpa

ddarikpa1#

所以我设法做到了。负责发送电子邮件的代码在django_otp.plugins.otp_email.models.py文件中。你可以在 EmailDevice Model类中看到 generate_challenge()。我通过在 send_mail() 中添加 html_message 参数来解决它,如下所示:
django_otp.plugins.otp_email.models.py.

send_mail(settings.OTP_EMAIL_SUBJECT,
      strip_tags(body),
      settings.OTP_EMAIL_SENDER,
      [self.email or self.user.email],
      html_message=body)

      ...

字符串
我的用例是不同的,所以,我分叉了原来的django-otp包,然后使用它。
您也可以通过编写自己的Device来实现这一点。这里是Extending Django-OTP文档的链接。

相关问题