API未发送电子邮件

时间:2019-03-22 18:26:12

标签: django django-rest-framework

我正在尝试构建一个rest API,该API会要求用户提供电子邮件,主题和消息,并将该主题和消息从settings.py文件中注册的电子邮件发送到电子邮件字段中提供的电子邮件。

我的models.py如下:

class Email(models.Model):
    email = models.EmailField(null=False)
    subject = models.CharField(max_length=250, null=False)
    message = models.CharField(max_length=500, null=False)

    def __str__(self):
        return self.email

我的views.py如下:

class EmailView(viewsets.ModelViewSet):
    serializer_class = EmailUser

    def get_queryset(self):
        queryset = Email.objects.all()
        return queryset

serializer.py文件如下所示:

class EmailUser(serializers.ModelSerializer):
    class Meta:
        model = Email
        fields = ('id', 'email', 'subject', 'message')

    def send_email_user(self, subject, message, from_email=None, **kwargs):
        return send_mail(subject, message, from_email, [self.email], **kwargs)

和urls.py如下:

url(r'email-user/', csrf_exempt(EmailView.as_view({'post': 'create', 'get': 'list'})))

我希望它会将电子邮件发送到提供的电子邮件地址,但是当我进行POST呼叫时,电子邮件,主题和消息存储在数据库中,但是电子邮件没有发送到提供的电子邮件。

如果有人可以准确地告诉我我在这方面做错了什么,那么我是Django rest框架的新手。

1 个答案:

答案 0 :(得分:1)

A ViewSet doesn't have a post method

  

ViewSet类只是基于类的View的一种,它不提供任何方法处理程序,例如.get()或.post(),而是提供诸如.list()和.create()的操作。

您可以尝试改用CreateModelMixin和ListAPIView。

views.py

class Handler extends ExceptionHandler
    {
        ...

        public function report(Exception $e)
        {
            ...

            {
                \Log::error($e);
            }

        }