Модели Django, сигналы и задержка отправки электронной почты



Я добавил сигнал к моей модели, который отправляет электронную почту на некоторые адреса электронной почты после сохранения модели (через models.signals.post_save.connect сигнал и send_mail для отправки электронной почты). Эта идея все еще делает задержку для пользователей, когда они сохраняют модель на сайте, они должны ждать, пока все эти письма не будут отправлены, и тогда они получат ответ от сервера.



Прежде чем пробовать сигналы, я попытался обернуть метод сохранения моей модели, а после super(Foo, self).save(*args, **kwargs) я отправлял электронные письма. Этот опыт задержки происходил и этим методом тоже.



Я просто хочу, чтобы мои действия по отправке электронной почты выполнялись в фоновом режиме, не показывая задержек пользователям на сайте.



Как это можно решить?

659   2  

2 ответов:

Проще всего поставить сообщения электронной почты в очередь, а затем отправить их демоном. Проверьте django-mailer.

Поскольку вы, по-видимому, интересуетесь только send_mail, вы можете начать с двух шагов. Во-первых, используйте это для импорта версии send_mail от django-mailer:

# favour django-mailer but fall back to django.core.mail
from django.conf import settings

if "mailer" in settings.INSTALLED_APPS:
    from mailer import send_mail
else:
    from django.core.mail import send_mail

А затем создайте cronjob, который вызывает manage.py send_mail для отправки почты. ПроверьтеDjango-mailer usage docs , например, записи cronjob.

Если вы не видите никакой электронной почты получить отправлено, попробуйте запустить manage.py send_mail на консоли. Похоже, это проблема номер один, с которой сталкиваются люди.

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

Этот вопрос о том, как справиться с этим: Советы по Python / Django и очередям сообщений

Comments

    Ничего не найдено.