Django / Python: Как я могу отслеживать базу данных MySQL и запускать электронную почту, когда timestamp = NOW () - PullRequest
0 голосов
/ 08 марта 2011

Если я хочу сделать систему оповещения. Как я могу реализовать эту функцию?

У меня есть база данных MySQL, в которой хранятся сообщения пользователя и метка времени (или дата / время). Я хочу инициировать отправку электронной почты этому пользователю, если отметка времени больше текущей отметки времени.

Как я могу реализовать эту функцию с помощью веб-приложения на основе Django / python? Нужно ли использовать cron для мониторинга базы данных? или есть инструмент для мониторинга базы данных и запуска API-вызовов для отправки электронной почты?

Спасибо, ребята! Я буду ждать хороших ответов!

1 Ответ

1 голос
/ 08 марта 2011

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

Для отправки самой электронной почты у вас может быть что-то вроде:

from django.core.mail import EmailMultiAlternatives
from django.template.loader import render_to_string
from django.utils.html import strip_tags
import logging

logging.basicConfig(level=logging.DEBUG)
log = logging.getLogger(__name__)

def send_message(to):
    log.error('starting send email')
    subject, from_email = 'Message Confirmation', 'youraddress@gmail.com'
    html_content = render_to_string('emails/message.html', {'email': str(to)})
    # this strips the html, so people will have the text as well.
    text_content = strip_tags(html_content)
    # create the email, and attach the HTML version as well.
    msg = EmailMultiAlternatives(subject, text_content, from_email, [to])
    msg.attach_alternative(html_content, "text/html")
    msg.send()

С вашей точки зрения, вы можете немедленно отправить это письмо с помощью:

send_message(user_email)

Или вы можете проверить дату сообщения и, если время является определенным значением, отправить.

...