2010-02-28 1 views
1

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

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

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

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

ответ

1

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

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

# 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 на консоли. Это, по-видимому, проблема номер один.

2

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

Этот вопрос о том, как справиться с этим: Advice on Python/Django and message queues

Смежные вопросы