我希望在POST成功完成后发送电子邮件。似乎有意义的是,电子邮件将通过信号完成。我可以自己编写,如下所示:https://docs.djangoproject.com/en/1.6/topics/signals/#defining-and-sending-signals
然而,我无法弄清楚的是:
建议欢迎。
此外,是否有人使用Angular进行此操作?有没有一种简单的方法可以做到这一点,我没有看到?
答案 0 :(得分:6)
旧版Django的旧问题,但如果有人遇到它......没有必要使用信号。 Django现在有内置函数send_mail
。这是文档:
https://docs.djangoproject.com/en/1.8/topics/email/
因此,您将使用该功能创建和发送电子邮件。它甚至可以接受HTML模板作为消息参数,并用Django数据填充它,这很不错。
因此,您要定义包含此方法的函数,例如:
def email_client(request):
id = request.POST.get('id')
client = Client.objects.get(id=id)
msg_html = render_to_string('templates/email.html', {'client': client})
template_email_text = ''
return send_mail('Lelander work samples', template_email_text, 'test@emailsender.com', ['test@emailrecipient.com'], html_message=msg_html, fail_silently=False)
在post
中的DRF API视图中包含该功能:
class ClientList(generics.ListCreateAPIView):
queryset = Client.objects.all()
serializer_class = ClientSerializer
def get(self, request, *args, **kwargs):
return self.list(request, *args, **kwargs)
def post(self, request, *args, **kwargs):
email_client(request)
return self.create(request, *args, **kwargs)
答案 1 :(得分:3)
我对问题2没有很好的答案,主要是因为我认为最好的地方是你班级的 post_save 方法。这样,您确定您的对象已创建,您可以访问该对象和请求,并且您不需要打扰实现信号(这可能需要另一个类仅用于电子邮件发送)。