django - 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 框架的新手,如果有人能准确地告诉我我做错了什么,这将非常有帮助。
解决方案
ViewSet 类只是一种基于类的 View,它不提供任何方法处理程序,例如 .get() 或 .post(),而是提供诸如 .list() 和 .create() 之类的操作。
您可以尝试改用 CreateModelMixin 和 ListAPIView。
视图.py
from rest_framework import generics, mixins
class EmailAPIView(mixins.CreateModelMixin, generics.ListAPIView):
serializer_class = EmailUser
def get_queryset(self):
queryset = Email.objects.all()
return queryset
def perform_create(self, serializer):
serializer.save(user=self.request.user)
def post(self, request, *args, **kwargs):
subject = request.POST.get('subject')
message = request.POST.get('message')
from_email = request.POST.get('from_email')
user = # Do some logic to get your user here
send_mail(subject, message, from_email, [user.email], **kwargs)
return self.create(request, *args, **kwargs)
def get_serializer_context(self, *args, **kwargs):
return {'request': self.request}
推荐阅读
- c++ - 遍历最小堆时获取垃圾值
- odata - Select=*,PropertyName 不返回 Microsoft Graph api 中 PropertyName 的值
- swift - 整数文字“4294967295”在存储到“Int”时溢出
- javascript - 我怎样才能在javascript中追加?
- php - 致命错误:phpmyadmin 中的执行时间超过 30 秒
- java - Spring Boot 中的 500 内部服务器错误而不是 404
- angular - Angular – Socket.io 发出不工作
- python - 为什么相对进口如此受限制?
- openssl - Keytool list 命令显示不正确的密钥库格式
- git - 自动合并 package-lock.json