Django:DRY /模块化动态Django电子邮件? emails.py 再次

问题描述

问题

是否存在更好的组织基于类的Django电子邮件的更好方法? (例如可能与我们编写Django模型,管理器,表,CBV等类似的软件包)

上下文

还有很多...对不起。

我最近一直在学习如何使用Django发送电子邮件,并且到目前为止,与Django的其他部分(例如模型,管理器,CBV等)相比,它确实不直观。

这似乎增加了很多代码,而且除了注释之外,使用send_mail()时您还无法真正分辨出要发送的内容

此外,参数from_email是强制性的,如果为空,则会引发错误,但是在the documentation中,它的字面意思是

from_email:字符串。如果为None,则Django将使用DEFAULT_FROM_EMAIL设置的值。

再次

如果为None,则Django将使用DEFAULT_FROM_EMAIL设置的值。

但是,如果您不直接分配它,则会收到此错误

send_mail()缺少1个必需的位置参数:“ from_email”

在得知这一点后不久,我认为EmailMessage班就有希望了。

事实上,我认为它确实使它更加直观,因为

1。由于send方法,您不必在要发送的代码行中直接编写所有内容

例如:

# app/emails.py
from django.core.mail imoprt EmailMessage

newsletter_signup_confirmation = EmailMessage(
    'You\'ve successfully signed up!','We\'ll send you your content soon',to=[emails]
)

# app/forms.py
from django import forms
from .emails import newsletter_signup_confirmation

class NewsletterSignupForm(forms.ModelForm):
    # ...

    def save(self,commit=True,*args,**kwargs):
        mymodel = super().save(commit=False,**kwargs)
        if commit:
            newsletter_signup_confirmation.send()  # Send email

2。实际上,您可以分辨出该电子邮件是什么,因为您必须使用它创建一个对象。

例如,哪个更具描述性?

send_mail(
    'We\'ve received your message!','Hi we just wanted to let you kNow that we\'ve received your message and will get back to you as'
    'soon as we can.'
    None,[email]
)

# OR

message_received_confirmation = EmailMessage(
    'We\'ve received your message!','Hi we just wanted to let you kNow that we\'ve received your message and will get back to you as'
    'soon as we can.'
    to=[email]
)
message_received_confirmation.send()

3。您可以省略from_email,它将自动使用 DEFAULT_FROM_EMAIL并且如果您未将其包含在内,则不抛出拟合 是实例化。

现在

这是一个改进... 实际上,这几乎可行。 除了涉及动态内容外,没有其他方法可以轻松地包含动态内容,而无需编写电子邮件主题/正文。

例如,我不能:

# app/emails.py

newsletter_signup_noficiation = EmailMessage(
    f'Contact {self.contact_name} has sent you a message.'
    f'Your contact {self.first_name} ({self.email}) sent you a message\n\nMessage{self.message}',to=[settings.CUSTOMER_SUPPORT_EMAILS]
)

并使其动态工作。

根据我所看到的,除非您决定弄乱模型的方法,否则您必须在每个要使用的地方逐字写出电子邮件内容

同样,问题

是否存在更好的组织基于类的Django电子邮件的更好方法? (例如可能与我们编写Django模型,管理器,表,CBV等类似的软件包)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)