1

ユーザーが自分のサイトにアクセスし、テキストの文字列、電子メール、友人の電子メール、電子メールを受け取りたい日付を入力する 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
4

3 に答える 3

0

このために、django でカスタム管理コマンドを作成できます。cron job次に、このコマンドを実行する毎日をスケジュールする必要があります。

BooleanFieldメールがすでに送信されているかどうかを確認するためにも追加する必要があります。

関連する質問を見てください - Django - スケジュールされたジョブを設定しますか?

于 2013-02-03T05:09:05.387 に答える
0

django と python ではメールを送信するのは簡単なので、ここでは触れません。特定のイベントで電子メールを送信するという問題は、Web アプリケーションの仕事ではありません。django コマンド ( https://docs.djangoproject.com/en/dev/howto/custom-management-commands/ )を呼び出す cron ジョブを設定することをお勧めします。発生しようとしているイベントをデキューし、適切な電子メールを送信する簡単なコマンドを記述します。リアルタイムをシミュレートするのに十分な間隔で cron を実行します。

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)
    email_sent = model.BooleanField(default=False)

dequeueemail.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 を使用した解決策を受け入れる可能性があるので、1 つ提示します。1 回だけ実行される cron ジョブと同様に、Celery は特定の日時までタスクを遅らせることができます: http://celery.readthedocs.org/en/latest/userguide/calling.html#eta-and-countdown

それはかなり簡単です。キーワード argetaに adatetimeを指定するだけ.apply_asyncで、その時点でタスクが実行されます。

于 2013-02-03T10:31:56.413 に答える