Django 1.3, как сигнализировать, когда пост закончился как на ebay? - PullRequest
2 голосов
/ 11 августа 2011

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

Итак, я хочу сказать, чтобы сделать уведомление через django-уведомление или просто отправить электронное письмо одному из моих пользователей, когда его сообщение закончится, как на ebay. В моей базе данных есть модель, в которой хранится дата и время окончания публикации, но я не уверен, как эффективно проверить или сохранить сигнал или что-то, что предупреждает систему, чтобы предупредить пользователя, когда текущее время > чем дата и время окончания.

спасибо!

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

Ответы [ 3 ]

1 голос
/ 11 августа 2011

Вы можете использовать django-celery - подключить обработчик post_save , который проверяет, является ли created значением True, и если да, то планирует Task, что 'уведомит пользователя в нужное время (используя ключевое слово eta arg ).

0 голосов
/ 11 августа 2011

Как уже говорили другие, лучшим решением является django-сельдерей (https://github.com/ask/django-celery), но он немного тяжелый, если у вас мало ресурсов.

При аналогичной необходимости у меня есть промежуточное ПО, которое проверяет условия и выполняет необходимые операции (которые в моем случае просто меняют логическое значение в некоторых записях базы данных). Это работает для меня, потому что до тех пор, пока кто-то на самом деле не получит доступ к данным, менять его не нужно, и потому что «задача» - это всего лишь один запрос ОБНОВЛЕНИЯ, поэтому это не невыносимая нагрузка.

В противном случае вы можете настраивать работу cron каждый короткий промежуток времени (1 минута, 5 минут?), Проверять условия и последствия.

0 голосов
/ 11 августа 2011

Мне кажется, что вы хотя бы продумали некоторые решения.Однако следует иметь в виду, что Django, будучи веб-фреймворком, является «машиной» без состояний.В двух словах, это означает, что он не «работает» в доли секунды, когда срок действия сообщения истекает (или, скорее, вы не можете предполагать, что запрос отправляется из браузера в доли секунды, когда срок действия сообщения истекает).Это означает, что использование Django для сигнализации / отправки уведомления не подходит.

Однако, поскольку вы точно знаете, когда следует отправлять электронное письмо, должна быть возможность поставить в очередь уведомление в Django, как только будет создано сообщение.Некоторым сторонним «программам» придется обработать очередь для фактической отправки уведомления ... для этого есть все виды творческих способов, но вы, безусловно, можете использовать python для этого.

Если вы хотитечтобы рассмотреть возможность использования очереди сообщений, взгляните на RabbitMQ http://nathanborror.com/posts/2009/may/20/working-django-and-rabbitmq/

...