django.contrib.sessions.middleware.SessionMiddleware
djangoにインストールし、tastypieのAPI認証にクラスを使用しているとしSessionAuthentication
ます。セッション内で、APIを介してモデルにいくつかの変更を加え、その後ロールバックしたいと思います。tastypieでできますか?はいの場合、どのメソッドを実行する必要がありますか?tastypieドキュメントでそのようなメソッドを見つけることができません。その実例はありますか?
2 に答える
Djangoは、複数の状態変更をアトミックにコミットするデータベーストランザクションをサポートしています。(ドキュメント...)
ロールバックをどのようにトリガーするかは、質問では明確ではありません。1つのオプションは、要求トランザクションを使用することです。これは、未処理の例外がビュー関数によって発行された場合にロールバックします。よりきめ細かい制御が必要な場合は、リンク先のドキュメントのオプションをよく理解してください。たとえば、トランザクションを明示的に作成してから、ビュー内でロールバックすることができます。
Tastypieに関しては、Resource
インターフェースの適切なメソッド内にトランザクション管理を配置する必要がある場合があります。
これがあなたにいくつかの指針を与えることを願っています。必要に応じて、質問を詳細に更新してください。
モデルへの変更をデータベースにコミットしてから、将来の要求でそれらをロールバックしますか? それは TastyPie がサポートするものではありません (さらに言えば、Django や SQL も)。その間、他のリクエストがそれらのオブジェクトと対話/変更/関係を構築した可能性があることを考えると、そのようなクリーンなロールバックを行うことは実際には不可能です。
おそらく最善の解決策は、オブジェクトを以前の状態に復元できる Reversionのようなものを統合することでしょう。
セッション中にすべての操作をロールバックできるようにしたい場合は、おそらく、セッションの開始時刻と変更されたオブジェクトのリストを追跡する必要があります。ロールバックを実行したい場合は、そのリストを反復処理して、次のようにreversion
のrevert
メソッドを呼び出すだけです。
reversion.get_for_date(your_model, session_start_datetime).revert()
ただし、繰り返しますが、他のユーザーが同じ時間枠で行った変更もロールバックされますが、これは、この要件に対するすべてのソリューションに当てはまります。