使用Django Rest Framework和Angular从API端点发送电子邮件

时间:2014-08-08 22:08:14

标签: django angularjs django-rest-framework django-signals

我希望在POST成功完成后发送电子邮件。似乎有意义的是,电子邮件将通过信号完成。我可以自己编写,如下所示:https://docs.djangoproject.com/en/1.6/topics/signals/#defining-and-sending-signals

然而,我无法弄清楚的是:

  1. Django Rest Framework是否支持信号(为什么它不会,它只是Django)
  2. 我该怎么发送自定义信号?什么是发件人?
  3. 建议欢迎。

    此外,是否有人使用Angular进行此操作?有没有一种简单的方法可以做到这一点,我没有看到?

2 个答案:

答案 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)

  1. 是的,DRF支持信号。
  2. 我对问题2没有很好的答案,主要是因为我认为最好的地方是你班级的 post_save 方法。这样,您确定您的对象已创建,您可以访问该对象和请求,并且您不需要打扰实现信号(这可能需要另一个类仅用于电子邮件发送)。