【问题标题】:nm, address = addr ValueError: not enough values to unpack (expected 2, got 1), Django Rest Frameworknm, address = addr ValueError: no enough values to unpack (expected 2, got 1), Django Rest Framework
【发布时间】: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


【解决方案1】:
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'],

我认为问题是由这些行末尾的逗号引起的,这使得分配的值变成了元组。你为什么要这么做?

【讨论】:

  • 谢谢!是的,这就是问题所在。发生这种情况是因为我进行了不同的更改,从旧代码中复制粘贴并用作对象,然后删除对象并内联添加这些声明,等等。这只是因为分心而引起的,没有任何理由。谢谢!
猜你喜欢
  • 2020-10-10
  • 2017-12-23
  • 1970-01-01
  • 2020-11-19
  • 2020-10-26
  • 2022-07-22
  • 1970-01-01
  • 2021-12-31
  • 1970-01-01
相关资源
最近更新 更多