Модели Django, сигналы и задержка отправки электронной почты - PullRequest
2 голосов
/ 28 февраля 2010

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 28 февраля 2010

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

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

1 голос
/ 28 февраля 2010

Самое простое - поставить сообщения электронной почты в очередь, а затем отправить их демону.Проверьте 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 docs , например, записи cronjob.

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

...