Django: отправить письмо после перенаправления - PullRequest
0 голосов
/ 23 апреля 2020

Есть ли способ отправить электронное письмо сразу после «перенаправления возврата»?

views.py

Вариант 1. Размещение «send_mail» перед «перенаправлением»

    if request.method == 'POST':
                formset = TestFormSet(request.POST,request.FILES,instance=project)
                if formset.is_valid():
                    subject = 'Notifications'
                    html_message = "Testing notifications"
                    recipient = ["testingemail@gmail.com"]
                    send_mail(subject, html_message, EMAIL_HOST_USER, [recipient],fail_silently = False)
                    formset.save()
                    return redirect("home")


With Option 1, the email is sent successfully but on the front-end the page has to wait until the email is sent before the redirection takes place.

Вариант 2: размещение 'send_mail' после перенаправления

 if request.method == 'POST':
                formset = TestFormSet(request.POST,request.FILES,instance=project)
                if formset.is_valid():
                    formset.save()
                    return redirect("home")
                    subject = 'Notifications'
                    html_message = "Testing notifications"
                    recipient = ["testingemail@gmail.com"]
                    send_mail(subject, html_message, EMAIL_HOST_USER, [recipient],fail_silently = False)

При Варианте 2 форма набора сохраняется, но электронное письмо не отправляется. Есть ли способ отправить электронное письмо после перенаправления, чтобы пользователь не дождался обработки электронного письма до перенаправления страницы?

Спасибо.

1 Ответ

0 голосов
/ 23 апреля 2020

Любой код после return не будет запущен. Одним из подходов является использование очереди задач, например сельдерея, и отправка электронной почты в качестве фоновой задачи. Вы можете посмотреть на django -mailer . Недостатком этих подходов является то, что у вас есть дополнительная система для обслуживания.

Вы можете увидеть некоторые решения, которые отправляют электронную почту в отдельном потоке, но я бы избегал их, поскольку они могут быть fr agile.

...