1

我正在构建一个 django 应用程序,让用户访问我的网站,输入一串文本、他们的电子邮件、朋友的电子邮件以及他们希望收到电子邮件的日期。

我将如何在他们在 date_returned 字段中请求的日期将他们输入的文本通过电子邮件发送给他们?有什么具体的应用吗?循环?ETC

谢谢,

我的 Models.py 看起来像:

class bet(models.Model):
name = models.CharField(max_length=100)
email_1 = models.EmailField()
email_2 = models.EmailField()
wager = models.CharField(max_length=300)
date_submitted = models.DateField(_("Date"), auto_now_add=True) 
date_returned = models.DateField(null=True)

def __unicode__(self):
    return self.name

class BetForm(ModelForm):
name = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'Bet Name'}),      max_length=100)
email_1 = forms.EmailField(widget=forms.TextInput(attrs={'placeholder': 'Your Email'}))
email_2 = forms.EmailField(widget=forms.TextInput(attrs={'placeholder': 'Your Friend\'s Email'}))
wager = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'What\'s The Wager?'}), max_length=200)
date_returned = forms.DateField(widget=SelectDateWidget())
class Meta:
    model=bet
4

3 回答 3

0

为此,您可以在 django 中编写自定义管理命令。然后,您将需要安排每天cron job运行此命令。

您还应该添加一个BooleanField以检查电子邮件是否已发送。

请看一个相关的问题 - Django - Set Up A Scheduled Job?

于 2013-02-03T05:09:05.387 回答
0

在 django 和 python 中,发送电子邮件很容易,所以我不会涉及。在某些特定事件中发送电子邮件的问题不是 Web 应用程序的工作。我建议设置一个调用 django 命令的 cron 作业(https://docs.djangoproject.com/en/dev/howto/custom-management-commands/)。编写一个简单的命令来使即将发生的事件出列并发送适当的电子邮件。让 cron 定期运行以模拟实时。

模型.py

class Bet(models.Model):
    name = models.CharField(max_length=100)
    email_1 = models.EmailField()
    email_2 = models.EmailField()
    wager = models.CharField(max_length=300)
    date_submitted = models.DateField(_("Date"), auto_now_add=True) 
    date_returned = models.DateField(null=True)
    email_sent = model.BooleanField(default=False)

出队邮件.py

from django.core.management.base import BaseCommand, CommandError
from app_name.models import bet 

class Command(BaseCommand):
    def handle(self, *args, **options):
        for bet in bet.objects.filter(date_returned__gt=datetime.datetime.now(),email_sent=False):
            #python code to send email
            bet.email_sent=True
            bet.save()

crontab

* * * * * python manage.py dequeueemail

如果您想在不实际安装 cron 的情况下破解此应用程序,请查看此应用程序 ( http://code.google.com/p/django-cron/ )

于 2013-02-03T05:11:01.817 回答
0

从 Celery 标签上的问题来看,您可能对使用 Celery 的解决方案持开放态度,所以我会提出一个。类似于只运行一次的 cron 作业,Celery 可以将任务延迟到给定的日期时间:http ://celery.readthedocs.org/en/latest/userguide/calling.html#eta-and-countdown

这是相当直接的。只需为您的调用提供关键字 arg eta,该任务将在那时执行。datetime.apply_async

于 2013-02-03T10:31:56.413 回答