Ошибка: Представление не вернуло HttpResponse при попытке отправить электронное письмо

#python #django

Вопрос:

Я хочу вручную утвердить отчеты для клиентов после того, как они согласятся с условиями. Для этого я хочу, чтобы электронное письмо было отправлено мне самому, когда клиент нажмет «принять». Вместо этого я получаю следующую ошибку:

Просмотр учетных записей.просмотры.TermsView не вернул объект HttpResponse. Вместо этого он ничего не вернул.

Я искал ту же ошибку здесь, но не смог ее решить с помощью этих. Извините, здесь новый программист.

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")
 

Ответ №1:

Ваш 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()