Reputation: 1
I am trying to build a rest API that will ask for an email, subject and message from the user and send that subject and message to the email provided in the email field, from the email registered in the settings.py file.
My models.py is as follows:
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
my views.py is as follows:
class EmailView(viewsets.ModelViewSet):
serializer_class = EmailUser
def get_queryset(self):
queryset = Email.objects.all()
return queryset
serializer.py file looks something like this:
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)
and urls.py is as follows:
url(r'email-user/', csrf_exempt(EmailView.as_view({'post': 'create', 'get': 'list'})))
I expect that it will send the email to the provided email address but as I do POST call the email, subject and Message is stored in the database but email isn't sending to the provided email.
I am newbie in django rest framework if someone could tell me exact what I am doing wrong in this will be quite helpful.
Upvotes: 0
Views: 59
Reputation: 998
A ViewSet doesn't have a post method.
A ViewSet class is simply a type of class-based View, that does not provide any method handlers such as .get() or .post(), and instead provides actions such as .list() and .create().
You could try using CreateModelMixin and ListAPIView instead.
views.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}
Upvotes: 1