Django Rest Framework: Не отправляется электронное письмо из формы react Ошибка 400
Я пытаюсь отправить форму, используя конечную точку API, указанную ниже. Проблема в том, что я получаю ошибку 400, когда я использую свое приложение на основе реакта. Если я использую страницу с конечной точкой api, она работает. Я проверил полезную нагрузку, и единственное различие, похоже, заключается в том, что я не отправляю токен csrf в своем приложении react. До сих пор в этом не было необходимости, когда я использовал сериализаторы моделей. Я полагаю, что это что-то внутри сериализатора, но не могу определить, что именно. Кто-нибудь знает, что может быть причиной ошибки 400?
sendEmail.js
const testmessage = "This is a test message"
const testemail = "dsfds@dsfg.de"
const clientnametest = "name"
function sendProposal(values) {
console.log("start sending proposal...");
setSendProp(true)
const data = new FormData()
data.append("Clientname", clientnametest || "");
data.append("Sender", testemail || "");
data.append("Message", testmessage || "");
axios.post(API.email.proposal, data, {
headers: {
"Authorization": `Bearer ${accessToken}`,
'Accept' : 'application/json',
},
withCredentials: true,
})
.then(res => {
})
.finally(() => {
setSendProp(false)
})
success()
}
views.py
class ProposalEmailView(APIView):
permission_classes = [IsAuthenticated]
serializer_class = ProposalEmailSerializer
def post(self, request, *args, **kwargs):
serializer_class = ProposalEmailSerializer(data=request.data)
if serializer_class.is_valid():
data = serializer_class.validated_data
ClientName = data.get('ClientName')
Sender = data.get('Sender')
Message = data.get('Message')
send_mail('Contact Form mail from ' + ClientName,
Message, Sender, ['test@test.test'],)
return Response({"success": "Sent"}, status=status.HTTP_200_OK)
return Response({"error": "Failed"}, status=status.HTTP_400_BAD_REQUEST)
serializers.py
class ProposalEmailSerializer(serializers.Serializer):
ClientName = serializers.CharField()
Sender = serializers.EmailField()
Message = serializers.CharField()
Это помогло мне решить проблему. Использование общих представлений было моей проблемой:
views.py
@api_view(['POST',])
def proposal(request):
if request.method == "POST":
serializer = ProposalEmailSerializer(data=request.data)
if serializer.is_valid():
ClientName = request.POST['ClientName']
Sender = request.POST['Sender']
Message = request.POST['Message']
# send mail
send_mail(
'Contact Form mail from ' + ClientName,
Message,
'test@test.domain',
[Sender],
)
# serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)