【发布时间】:2021-10-27 15:04:16
【问题描述】:
我正在开发一个使用 Django Rest Framework 和 Vue.js 制作的电子商务项目。我创建了一个联系表单,当我尝试发送它时,它会产生一个错误:
/venv/lib/python3.9/site-packages/django/core/mail/message.py", line 96, in sanitize_address
nm, address = addr
ValueError: not enough values to unpack (expected 2, got 1)
它似乎需要某种从我的views.py 中得不到的附加值。
这是我的序列化器:
from rest_framework import serializers
from .models import Contact
class ContactForm(serializers.ModelSerializer):
class Meta:
model = Contact
fields = (
'first_name',
'last_name',
'phone',
'email',
'subject',
'message',
)
这是我的 Views.py:
from rest_framework import status
from rest_framework.response import Response
from rest_framework.decorators import api_view
from django.core.mail import send_mail
from django.template.loader import render_to_string
from .models import Contact
from .serializers import ContactForm
@api_view(['POST'])
def contact_form_post(request):
if request.method == "POST":
serializer = ContactForm(data=request.data)
if serializer.is_valid():
first_name = serializer.validated_data['first_name'],
last_name = serializer.validated_data['last_name'],
phone = serializer.validated_data['phone'],
email = serializer.validated_data['email'],
subject = serializer.validated_data['subject'],
message = serializer.validated_data['message']
print(first_name, last_name, phone, email, subject, message)
context = {
'first_name': first_name,
'last_name': last_name,
'phone': phone,
'email': email,
'subject': subject,
'message': message
}
send_mail(
subject,
render_to_string('emails/contact.txt', context),
email,
['emailThatItryToUse@gmail.com'],
fail_silently=False,
auth_user=None, auth_password=None, connection=None, html_message=None
)
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
我已经通过控制台检查了是否检测到表单信息并且确实检测到了。所有这些都是我通过 v-model="" 获得的。
这是我的电子邮件 settings.py 配置:
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_HOST_USER = 'emailThatiTryToUse@gmail.com'
EMAIL_HOST_PASSWORD = 'accessPasswordforThatEmail'
EMAIL_USE_TLS = True
这是用于将数据发送到后端的 JavaScript:
const data = {
'first_name': this.first_name,
'last_name': this.last_name,
'phone': this.phone,
'email': this.email,
'subject': this.subject,
'message': this.message,
}
axios
.post('/api/v1/contacto/', data)
.then(response => {
this.$router.push('/')
return response
})
.catch(error => {
this.errors.push('Algo funciona mal')
console.log(error)
})
我真的希望你能帮助我。谢谢!
【问题讨论】:
-
从
serializer.validated_data赋值语句中删除逗号。也就是说,应该是first_name = serializer.validated_data['first_name']而不是first_name = serializer.validated_data['first_name'],(等等) -
谢谢!我没看到!
标签: javascript python django django-rest-framework