Хобрук: Ваш путь к мастерству в программировании

Django: отправить электронное письмо после перенаправления

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

просмотры.py

Вариант 1: Размещение «send_mail» перед «redirect»

    if request.method == 'POST':
                formset = TestFormSet(request.POST,request.FILES,instance=project)
                if formset.is_valid():
                    subject = 'Notifications'
                    html_message = "Testing notifications"
                    recipient = ["[email protected]"]
                    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 = ["[email protected]"]
                    send_mail(subject, html_message, EMAIL_HOST_USER, [recipient],fail_silently = False)

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

Спасибо.


Ответы:


1

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

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

23.04.2020
  • Стандартный django send_mail() действительно работает. Я изменил «EMAIL_HOST_USER» на «settings.EMAIL_HOST_USER». Мой импорт был неправильным. Но я решил пойти с сельдереем, и это тоже работает. Спасибо за предложение. 10.08.2020
  • Стандартный метод django send_mail() на самом деле работает - я считаю, что вариант 2 не работает, потому что код после возврата не запускается. 10.08.2020
  • Новые материалы

    Декларативное и функциональное программирование в стиле LINQ с использованием JavaScript с использованием каррирования и генератора ...
    LINQ - одна из лучших функций C #, которая обеспечивает элегантный способ написания кода декларативного и функционального стиля, который легко читать и понимать. Благодаря таким функциям ES6,..

    Структуры данных в C ++ - Часть 1
    Реализация общих структур данных в C ++ C ++ - это расширение языка программирования C, которое поддерживает создание классов, поэтому оно известно как C с классами . Он используется для..

    Как я опубликовал свое первое приложение в App Store в 13 лет
    Как все началось Все началось три года назад летом после моего четвертого класса в начальной школе. Для меня, четвертого класса, лето кажется бесконечным, пока оно не закончится, и мой отец..

    Что в лицо
    Очерк о возвращении физиогномики и о том, почему мы должны это приветствовать. История начинается со странной науки. Р. Тора Бьорнсдоттир, Николас О. Рул. Видимость социального класса по..

    Почему шаблоны проектирования и почему нет?
    Сложность — мать всех проблем в программировании. Программное обеспечение должно быть разработано с точки зрения того, кто его поддерживает, а не того, кто его пишет, потому что программное..

    Создание дизайна обуви с помощью машинного обучения
    Обувь. Что подождать? Я думал, что речь пойдет о машинном обучении! Ну это так. Если бы вы пошли на Amazon, сколько обуви вы бы нашли? Наверное, много, не так ли? Но много ли в них..

    GraalVM в 2022 году: итоги года
    2022 год был очень продуктивным для проекта и сообщества GraalVM. Вместе мы разработали множество новых функций, выпустили GraalVM для последних версий Java и новых платформ и увидели несколько..