2

特定のアクションでユーザーに電子メールが送信されるようにスケジュールしたい。ただし、ユーザーが別のアクションを実行した場合は、そのメールをキャンセルして送信しないようにします。

djangoまたはpythonでそれをどのように行うのですか?

4

5 に答える 5

4

Beanstalkd

Beanstalkdをインストールし、コマンドラインからPythonスクリプトを実行できる場合は、それを使用してメールをスケジュールします。Beanstalkcクライアントを使用すると、これを簡単に実現できます。ubuntuでは、最初に以下をインストールする必要があるかもしれません:

  • sudo apt-get install python-yaml python-setuptools

Consumer.py:

インポートbeanstalkc

def main():
    beanstalk = beanstalkc.Connection(host='localhost', port=11300)
    while True:
        job = beanstalk.reserve()
        print job.body
        job.delete()


if __name__ == '__main__':
    main()

producer.pyによって挿入されてから5秒後にジョブを印刷します。オフコースでは、これをメールのスケジュールを設定する時間に長く設定する必要がありますが、デモンストレーションの目的で使用できます。テスト時にメッセージをスケジュールするために30分待つ必要はありません;)。

producer.py:

インポートbeanstalkc

def main():
    beanstalk = beanstalkc.Connection(host='localhost', port=11300)
    jid = beanstalk.put('foo', delay=5)

if __name__ == '__main__':
    main()

GAEタスクキュー

これを実現するために、GoogleAppEngineのタスクキューを使用することもできます。タスクにを指定できetaます。Google App Engineには、寛大な無料の割り当てがあります。タスクキューのWebhookで、電子メールの送信を行うサーバー上のURLをフェッチする非同期リクエストを作成します。

于 2011-01-19T04:04:27.203 に答える
3

私はあなたがやりたいことすべてを処理できるcronジョブを設定します...

于 2011-01-19T03:56:07.717 に答える
2

にアクセスできない場合はcron、次のように簡単に行うことができます。

  1. 電子メール、送信時間、および電子メールが送信されたかどうかを示すモデルを記述しますBooleanField
  2. まだ送信されていないが、今までに送信されているはずのすべての電子メールを選択して送信するビューを作成します。
  3. OpenACS UptimePingdom、または定期的にリクエストを送信できるその他のサービスなどを使用HTTP GETして、そのビューを呼び出し、電子メール送信をトリガーします。(どちらも無料です。前者は15分ごとにリクエストする必要があります。後者は最大1分ごとにリクエストするように構成でき、複数の場所からリクエストします。)

確かに、それはエレガントではありませんが、基本的にすべてのWebホストで機能する方法です。15秒後にすべてのプロセスを強制終了するホストで実行するPHPアプリを作成していたとき、私はこのようなことをしていました。

于 2011-01-19T10:37:46.633 に答える
0

セロリを使用していますか?trueの場合、http://ask.github.com/celery/userguide/executing.html#eta-and-countdownを参照してください

于 2011-01-19T03:54:06.683 に答える
0

PythonまたはDjangoを介してそれを実行したいとおっしゃいましたが、何か他のものが関与する必要があるようです。共有ホストを使用していることを考えると、他のパッケージのインストールも問題になる可能性があります。

別の可能な解決策は次のようなものである可能性があります。

時限イベントの設定、開始/キャンセルなどが可能なjavascriptフレームワークを使用します。ExtJSと呼ばれるフレームワークを使用して時限イベントを実行しました。ExtJSはかなり大きいですが、jQueryや生のjavascriptなどの他のフレームワークでも同様のことができると確信しています。

5分で実行されるユーザーアクションのタスクを設定します。アクションは、電子メールを送信するPythonスクリプトへのajax呼び出しである可能性があります...ユーザーがタスクを停止する必要がある場所で何かをした場合は、イベントをキャンセルするだけです。

複雑で複雑に見えますが、実際はそうではありません。これが試してみたいパスのように思われる場合は、お知らせください。コードを使用して編集します

于 2011-01-19T22:23:54.283 に答える