问题描述
问题
是否存在更好的组织基于类的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 (将#修改为@)