我正在构建一个django应用程序,用户来到我的网站,输入一串文本,他们的电子邮件,朋友的电子邮件以及他们希望通过电子邮件发送的日期。
如何在date_returned字段中请求的日期将他们输入的文本通过电子邮件发送给他们?任何特定的应用?循环?等
谢谢,
我的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
答案 0 :(得分:0)
你可以在django中写一个custom management command。然后,您需要安排运行此命令的每日cron job
。
您还应添加BooleanField
以检查是否已发送电子邮件。
请查看相关问题 - Django - Set Up A Scheduled Job?
答案 1 :(得分:0)
在django和python中发送电子邮件很容易,所以我不会深入研究。您在某个特定事件中发送电子邮件的问题不是Web应用程序的工作。我建议设置一个调用django命令(https://docs.djangoproject.com/en/dev/howto/custom-management-commands/)的cron作业。编写一个简单的命令,使即将发生的事件出列,并发送相应的电子邮件。让cron以足够的间隔运行以模拟实时。
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)
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()
* * * * * python manage.py dequeueemail
如果你想在没有实际安装cron的情况下破解它,请检查此应用程序(http://code.google.com/p/django-cron/)
答案 2 :(得分:0)
根据问题上的Celery标签判断,您可以使用Celery开放解决方案,因此我将提出一个解决方案。类似于只运行一次的cron作业,Celery可以将任务延迟到指定的日期时间:http://celery.readthedocs.org/en/latest/userguide/calling.html#eta-and-countdown
这是相当直接的。只需向您的eta
电话提供datetime
关键字arg .apply_async
,该任务就会在当时执行。