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

Dav*_*win 3 django django-signals angularjs django-rest-framework

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

但是,我无法弄清楚的是:

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

建议欢迎.

还有,有人用Angular这样做吗?有没有一种简单的方法可以做到这一点,我没有看到?

jck*_*stl 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)
Run Code Online (Sandbox Code Playgroud)

并在DRF API视图中包含该功能post:

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)
Run Code Online (Sandbox Code Playgroud)