我在我的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,但不知道如何操作?
1条答案
按热度按时间ddarikpa1#
所以我设法做到了。负责发送电子邮件的代码在django_otp.plugins.otp_email.models.py文件中。你可以在 EmailDevice Model类中看到 generate_challenge()。我通过在 send_mail() 中添加 html_message 参数来解决它,如下所示:
django_otp.plugins.otp_email.models.py.
字符串
我的用例是不同的,所以,我分叉了原来的django-otp包,然后使用它。
您也可以通过编写自己的Device来实现这一点。这里是Extending Django-OTP文档的链接。