我正在尝试构建一个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框架的新手。
答案 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);
}
}