2009-10-10 18 views
6

私は、管理に時間がかかる管理機能(データベースのインポート)があるので、その時間中にユーザーにフィードバックを表示したいと思っています。メッセージ。長い行動の間に部分的にページを送信するだけでも十分です。Django - アクションアクションの進捗状況を表示

Djangoでこれを行う最も簡単な方法は何ですか?

+0

なぜバーが進まない?..あなたは少し手の込んだことができ、お願いします? – 0100110010101

+0

進行状況バーもOKですが、アクションを実行する機能からどのように制御できるかわかりません – hmp

答えて

1

何らかのクライアントサイドスクリプト(Ajax)なしでこれを行う方法はありません。一定の間隔でサーバーをポーリングし、ユーザーに応答を表示するものが必要です。これがどのように行われるかを示すa snippetがあります。

もちろん、インポートを可能にするには、インポート自体をオフラインプロセスにする必要があります。これはインポートを行い、Ajaxがそれを照会できるように(ファイルまたはデータベース内の)どこかに定期的に進捗状況を記録します。これを行う良い方法は、Djangoベースの分散タスクキューceleryを使用することです。

最後に、Ajaxが呼び出すシンプルなビューが必要です。これは、長期実行プロセスを照会したり、作成した進行状況レコードを照会してクライアントに報告したりします。

かなり複雑です。

3
  1. Ajaxポーリング - クライアント側のタイマーを使用して、クライアントのタイマーを使用して、サーバーの状態を常にポーリングします。プロセスは次のようなものです:ユーザはデータベースの詳細を設定し、 'アップロード'をヒットします。ファイルが転送され、ページ要求がサーバー上で非同期プロセスを開始し、データベースのインポートが実行されます。ユーザーがアップロードをクリックすると、定期的にAJAX要求をサーバーに送信して進行状況を問い合わせるクライアント側タイマーが開始されます。サーバーはJSONを返し、クライアントサイドスクリプトはそれが何をしたいのかを判断します。

  2. COMET - 私はこれに精通していませんが、従来のAJAXは、クライアントが要求をサーバーに送信することによって動作します。それは「プル」コミュニケーションとして知られています。 COMETでは、それはプッシュです。サーバーは、サーバーが要求していなくても、進捗状況についてクライアントにデータをプッシュバックします。これにより、ポーリングに比べてサーバーの負荷が軽減されます。 GoogleはCOMET with Djangoを使用しているユーザーのためにいくつかの結果を示しています。

  3. 逆AJAX - COMETに似ています。 Reverse Ajax with Django

(I謝罪が、私は最後の2について少なくとも知っているが、私はあなたが、少なくとも彼らは存在知りたい考え出し)

関連する問題