4

ロードページを表示している間、DjangoでCeleryを使用してpdf生成をバックグラウンドに置きます。

しかし、タスクが完了すると (つまり、pdf が生成されます)、次のビューにリダイレクトして、メールを送信し、わかりやすい確認メッセージをユーザーに表示したいと考えています。

task_postrun または task_success シグナルを取得できることはわかっていますが、そこからリダイレクトすることはできません。

何時間も検索しましたが、解決策やアイデアが見つかりませんでしたか?

ありがとう !

4

1 に答える 1

3

次の 2 つの方法があります。

  1. サーバーに問い合わせます: PDF を保存しているモデルにtask_idを保存し、タスクが完了したかどうかを X 秒ごとに確認する ajax ビューを作成します。このビューの結果は、リダイレクトするか、PDF を待機するかを決定します。

    result = MyTask.AsyncResult(task_id)
    result.get()
    
  2. リアルタイム Web: もう 1 つの方法は、pusher_client_pythonで pusher を使用することです。PDF 生成が完了したら (PDF 作成ルーチンで)、接続されたクライアント (結果を待っているクライアント) に通知を送信する pusher への API 呼び出しを行います。 X秒ごとにサーバーに問い合わせる必要がないため、このアプローチはより便利です。ソケットのパラダイムについて学ぶ必要がありますが、実装は非常に簡単です。

お役に立てれば。

于 2013-07-18T16:39:57.527 に答える