特定のアクションでユーザーに電子メールが送信されるようにスケジュールしたい。ただし、ユーザーが別のアクションを実行した場合は、そのメールをキャンセルして送信しないようにします。
djangoまたはpythonでそれをどのように行うのですか?
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()
これを実現するために、GoogleAppEngineのタスクキューを使用することもできます。タスクにを指定できeta
ます。Google App Engineには、寛大な無料の割り当てがあります。タスクキューのWebhookで、電子メールの送信を行うサーバー上のURLをフェッチする非同期リクエストを作成します。
私はあなたがやりたいことすべてを処理できるcronジョブを設定します...
にアクセスできない場合はcron
、次のように簡単に行うことができます。
BooleanField
。HTTP GET
して、そのビューを呼び出し、電子メール送信をトリガーします。(どちらも無料です。前者は15分ごとにリクエストする必要があります。後者は最大1分ごとにリクエストするように構成でき、複数の場所からリクエストします。)確かに、それはエレガントではありませんが、基本的にすべてのWebホストで機能する方法です。15秒後にすべてのプロセスを強制終了するホストで実行するPHPアプリを作成していたとき、私はこのようなことをしていました。
セロリを使用していますか?trueの場合、http://ask.github.com/celery/userguide/executing.html#eta-and-countdownを参照してください
PythonまたはDjangoを介してそれを実行したいとおっしゃいましたが、何か他のものが関与する必要があるようです。共有ホストを使用していることを考えると、他のパッケージのインストールも問題になる可能性があります。
別の可能な解決策は次のようなものである可能性があります。
時限イベントの設定、開始/キャンセルなどが可能なjavascriptフレームワークを使用します。ExtJSと呼ばれるフレームワークを使用して時限イベントを実行しました。ExtJSはかなり大きいですが、jQueryや生のjavascriptなどの他のフレームワークでも同様のことができると確信しています。
5分で実行されるユーザーアクションのタスクを設定します。アクションは、電子メールを送信するPythonスクリプトへのajax呼び出しである可能性があります...ユーザーがタスクを停止する必要がある場所で何かをした場合は、イベントをキャンセルするだけです。
複雑で複雑に見えますが、実際はそうではありません。これが試してみたいパスのように思われる場合は、お知らせください。コードを使用して編集します