#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()