Ошибка: Представление не вернуло HttpResponse при попытке отправить электронное письмо
Я хочу вручную утверждать отчеты для клиентов после того, как они согласились с условиями. Для этого я хочу, чтобы при нажатии клиентом кнопки "Принять" мне отправлялось электронное письмо. Вместо этого я получаю следующую ошибку:
Представление accounts.views.TermsView не вернуло объект HttpResponse. Вместо этого оно вернуло None.
Искал такую же ошибку здесь, но не смог решить с помощью этих. Извините, я новый программист.
views.py
class TermsView(TemplateView):
template_name = "accounts/terms_of_service.html"
...
def post(self, *args, **kwargs):
self.request.user.terms_accepted = timezone.now()
self.request.user.save(update_fields=["terms_accepted"])
def send_mail(self):
messages.add_message(
self.request,
messages.SUCCESS,
_("Thank you! We will contact you as soon as possible."),
)
send_terms_agreed_reports(self.request.company, self.request.user)
return redirect("stays:dashboard")
emails.py
def send_terms_agreed_reports(company, user):
try:
email_subject = "New company wants to use reports"
return send_email(
settings.TERMS_AGREED_ENABLE_REPORTS,
email_subject,
"emails/terms_agreed_reports.html",
{"company": company.name, "reg_code": company.reg_code, "name": user.name, "email": user.email,
"phone": user.phone},
)
except Exception:
logger.exception("Could not send message")
Ваш метод post
в конечном итоге должен вернуть ответ HTTP, например, выполнив send_mail
:
class TermsView(TemplateView):
template_name = "accounts/terms_of_service.html"
# …
def post(self, *args, **kwargs):
self.request.user.terms_accepted = timezone.now()
self.request.user.save(update_fields=['terms_accepted'])
return self.send_mail()