Как Исправить Ошибку Исключения для Django/Sendgrid?

#python #django #sendgrid

Вопрос:

У меня небольшая проблема с отправкой электронных писем через sendgrid
, когда я отправляю электронное письмо с активацией, я получаю сообщение об ошибке:

 exception ("'int' object has no attribute 'get'",)  

Я провел некоторую отладку, и создается электронное письмо с уникальным ключом активации.
Все необходимые поля(от, получатели, тема, html-адрес электронной почты) были заполнены
Я также создал новый api_key в sendgrid, и он имеет полный доступ.
Я был бы признателен за любую обратную связь, если вам нужна дополнительная информация, пожалуйста, дайте мне знать. ниже приведен код, который я использую:

View.py:

 class AccountEmailActivateView(FormMixin, View):  success_url = '/'  form_class = ReactivateEmailForm  key = None   def get(self, request, key=None, *args, **kwargs):  self.key = key  if key is not None:  qs = EmailActivation.objects.filter(key__iexact=key)  confirm_qs = qs.confirmable()  if confirm_qs.count() == 1:  obj = confirm_qs.first()  obj.activate()  messages.success(request, "your email has been confirmed, please login.")  return redirect("account:login")  else:  activated_qs = qs.filter(activated=True)  if activated_qs.exists():  reset_link = reverse("password_reset")  msg = """Your email has already been confirmed  Do you need to lt;a href="{link}"gt;reset your password?lt;/agt;  """.format(link=reset_link)  messages.success(request, mark_safe(msg))  return redirect("account:login")  context = {  'form': self.get_form(),  'key': key,  }  return render(request, 'registration/activation-error.html', context)   def post(self, request, *args, **kwargs):  form = self.get_form()  if form.is_valid():  return self.form_valid(form)  else:  return self.form_invalid(form)   def form_valid(self, form):  msg = """Activation link sent, please check email"""  messages.success(self.request, msg)  email = form.cleaned_data.get("email")  obj = EmailActivation.objects.email_exists(email).first()  user = obj.user  new_activation = EmailActivation.objects.create(user=user, email=email)  new_activation.send_activation_email()  return super(AccountEmailActivateView, self).form_valid(form)   def form_invalid(self,form):  request = self.request  context = {  'form': form,  'key': self.key,  }  return render(request, 'registration/activation-error.html', context)  

account/Models.py:

 def send_activation_email(self):  if not self.activated and not self.forced_expired:  if self.key:  base_url = getattr(settings, 'BASE_URL', None)  print("base url", base_url)  sg_api_key = getattr(settings, 'EMAIL_HOST_PASSWORD', None)  key_path = reverse("account:email-activate", kwargs={'key': self.key})  path = "{base}{path}".format(base=base_url, path=key_path)  context = {   'path': path,  'email': self.email,  }  txt_ = get_template("registration/emails/verify.txt").render(context)  html_ = get_template("registration/emails/verify.html").render(context)  subject = '1-Click Email Activation'  from_email = settings.DEFAULT_FROM_EMAIL  recipient_list = [self.email]  sent_mail = send_mail(  subject,  txt_,  from_email,  recipient_list,  html_message=html_,  fail_silently=False,  )  print(send_mail)  try:  api_key = os.environ.get('SENDGRID_API_KEY', None)  sg = SendGridAPIClient(api_key)  response = sg.send(sent_mail)  print("status code: ",response.status_code)  print("body", response.body)  print("headers", response.headers)  except Exception as e:  print("exception", e.args)  return False  

Обновление 2021-11-24: Я добавил полную ошибку обратной трассировки (должен был добавить ее для начала действительно)

 Request Method: POST Request URL: http://localhost:8000/account/email/resend-activation/  Django Version: 3.1.12 Python Version: 3.8.10 Installed Applications: ['django.contrib.admin',  'django.contrib.auth',  'django.contrib.contenttypes',  'django.contrib.sessions',  'django.contrib.sites',  'django.contrib.messages',  'django.contrib.staticfiles',  'storages',  'accounts',  'addresses',  'analytics',  'billing',  'blog',  'carts',  'marketing',  'orders',  'payment',  'products',  'search',  'tags'] Installed Middleware: ['django.middleware.security.SecurityMiddleware',  'django.contrib.sessions.middleware.SessionMiddleware',  'django.middleware.common.CommonMiddleware',  'django.middleware.csrf.CsrfViewMiddleware',  'django.contrib.auth.middleware.AuthenticationMiddleware',  'django.contrib.messages.middleware.MessageMiddleware',  'django.middleware.clickjacking.XFrameOptionsMiddleware']    Traceback (most recent call last):  File "/home/beny/Documents/Projects/Python/Development/eCommerceV2/lib/python3.8/site-packages/django/core/handlers/exception.py", line 47, in inner  response = get_response(request)  File "/home/beny/Documents/Projects/Python/Development/eCommerceV2/lib/python3.8/site-packages/django/core/handlers/base.py", line 181, in _get_response  response = wrapped_callback(request, *callback_args, **callback_kwargs)  File "/home/beny/Documents/Projects/Python/Development/eCommerceV2/lib/python3.8/site-packages/django/views/generic/base.py", line 70, in view  return self.dispatch(request, *args, **kwargs)  File "/home/beny/Documents/Projects/Python/Development/eCommerceV2/lib/python3.8/site-packages/django/views/generic/base.py", line 98, in dispatch  return handler(request, *args, **kwargs)  File "/home/beny/Documents/Projects/Python/Development/eCommerceV2/src/accounts/views.py", line 63, in post  return self.form_valid(form)  File "/home/beny/Documents/Projects/Python/Development/eCommerceV2/src/accounts/views.py", line 74, in form_valid  new_activation.send_activation_email()  File "/home/beny/Documents/Projects/Python/Development/eCommerceV2/src/accounts/models.py", line 202, in send_activation_email  response = sg.send(sent_mail)  File "/home/beny/Documents/Projects/Python/Development/eCommerceV2/lib/python3.8/site-packages/sendgrid/base_interface.py", line 60, in send  message = message.get()  Exception Type: AttributeError at /account/email/resend-activation/ Exception Value: 'int' object has no attribute 'get'  

Комментарии:

1. Покажите нам полную обратную запись об ошибке!

2. @КлаусД. К сожалению, единственная возвращенная ошибка отображается в консоли: исключение («объект’int’ не имеет атрибута» get»»). Есть ли способ заставить блок try запустить полную обратную трассировку?

3. а) удалите его б) добавьте простое raise в except блок.

4. @КлаусД. Обновленный

5. sg.send(sent_mail) отправит возвращаемое значение send_mail() , которое может быть только 0 или 1 . Похоже, там нужен словарь.