2012-03-12 4 views
1

this question状態:TransactionMiddlewareセッションミドルウェア:トランザクションミドルウェアの前後に?ミドルウェアの順番について

SessionMiddleware

  • :私たちはここにトランザクションを必要としない

なぜ私は私のセッションの更新を望んでいないだろう私の取引で?セッションがビュー内で発生する何らかの副作用として更新され、ビューが失敗した場合、それでもセッションが失敗しなかったかのようにセッションを更新したい場合は想像できません。 (明らかに、セッションエンジンがデータベースベースでない場合、この問題は別の方法に近づく必要があります)。SessionMiddlewareTransactionMiddlewareの外で実行したいと思う明確な使用例を教えてください。

答えて

3

セッションミドルウェアは、メッセージミドルウェアによって使用されます。通常、メッセージミドルウェアをトランザクションから除外したいと考えています。

Messages Middleware page

からあなたは、セッションに依存しているストレージバックエンド(デフォルト)を使用している場合は「django.contrib.sessions.middleware.SessionMiddleware」有効にし、あなたのMIDDLEWARE_CLASSESにMessageMiddlewareの前に現れなければなりません。

トランザクションの失敗をユーザーメッセージとして表示したいので、メッセージミドルウェアをトランザクションから除外します。

また、長時間実行されているプロセスでは、通常、Messages/Sessionを使用してプロセスのステータスを更新します。同じものがAjax呼び出しによって取得されます。 Transactionの後にMessageまたはSession MWが置かれた場合、ステータスの更新は応答しません。

+0

セッションを使用してトランザクションの失敗に関するメッセージを伝えることは、非常に便利です。ありがとうございました。長時間実行しているプロセスの意味を説明できますか?大きなファイルのアップロードのように、ログを実行するリクエストを意味しますか? –

+0

長時間実行されているリクエスト/プロセスは、大容量ファイルのアップロードや、サーバー側で処理に時間がかかる場合でも同様です。 APIを使用してデータベースのユーザーのすべてのつぶやきを保存しているとします。セッションにステータスを保存し、AJAXを使用してステータスを取得することで、ジョブのステータスを更新し続けることができます。 – Pratyush

関連する問題