Django Restframe工作从发布的数据发送电子邮件

时间:2018-07-26 06:27:05

标签: python django django-rest-framework

我正在使用Django rest框架,我有一个与我们联系的表..在视图中,我使用基于类的视图,我想在用户发布数据时发送电子邮件..这是我的功能

   def post(self, request):  
        return self.create(request)
        return send_email(request)

def send_email(request):
    if request.method == 'POST':
        subject = request.POST.get('subject', '')
        message = request.POST.get('message', '')
        from_email = request.POST.get('email', '')
        send_mail(subject, message, from_email, ['haguwanax@l0real.net'], fail_silently=False)
        return Response (status=status.HTTP_200_OK)

它保存数据,但没有发送任何内容。 这是我的设置。py

EMAIL_HOST = 'smtp.gmail.com'
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
EMAIL_PORT = 587
EMAIL_HOST_USER = '*****@gmail.com'
EMAIL_HOST_PASSWORD = '*******'
EMAIL_USE_TLS = True

2 个答案:

答案 0 :(得分:0)

未调用send_email函数,因为您是在return self.create(request)之后调用它。因此,您无法访问send_email的代码。

请在return函数中仅使用一个post语句。

您可以在不使用return语句的情况下调用电子邮件方法,然后再调用return self.create(request)

send_email(request) return self.create(request)

答案 1 :(得分:0)

在同一代码块中不能一次使用两个return。您的第二个return语句将不会执行。

我认为您的create方法不需要返回任何东西。它只是存储一些值。 如果电子邮件发送成功与否,您的发送电子邮件可能会返回true或false 请在您的post函数中仅使用一个return语句。

您可以重写以下代码:

 def post(self, request):  
      self.create(request)
      check_mail=send_email(request)
      if check_mail:
           return Response (status=status.HTTP_200_OK)

def send_email(request):
    if request.method == 'POST':
        subject = request.POST.get('subject', '')
        message = request.POST.get('message', '')
        from_email = request.POST.get('email', '')
        send_mail(subject, message, from_email, ['haguwanax@l0real.net'], 
        fail_silently=False)
        return True