Как исправить ошибку исключения для Django/Sendgrid?
У меня небольшая проблема с отправкой электронной почты через sendgrid
.
Когда я отправляю письмо активации, я получаю следующую ошибку:
exception ("'int' object has no attribute 'get'",)
Я провел отладку, и электронное письмо генерируется с уникальным ключом активации.
Все необходимые поля (от, получатели, тема, html email) были заполнены
.
Я также создал новый 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 <a href="{link}">reset your password?</a>
""".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