1

すべてのページにログインする必要があるプライベートサイトがあります。ユーザーがレコードを編集しようとするとき、レコードをロックしたくありません。他の人が利用できるように記録を残したい。私は、dajax / dajaxiceを使用してdjangoへのAJAX呼び出しを使用して、レコードの編集の最新の人物と日時を取得するシステムを考案しました。最新の編集が現在のユーザーによって行われなかった場合、アラートボックスは、他のユーザーがレコードを開いてから編集を行ったことをユーザーに通知します。ユーザーはページを更新して最新バージョンのデータを取得する必要があります。

これはすべてうまくいっており、私たちの状況に完全に適合しています。セッションがタイムアウトしました。タイムアウトすると、ユーザーはログインプロンプトに移動します。ユーザーがページを開いたままにしてコンピューターを離れる場合に備えて、機密データを保護する必要があります。これも完璧に機能しています。

私の問題は、データのバージョンをチェックしてデータのバージョンが変更されているかどうかを確認するためにAJAX呼び出しが行われると、セッションも保存されるため、ページに無人でいる時間がどれだけ長くてもセッションがタイムアウトしないことです。

SESSION_SAVE_ON_EVERY_REQUESTをバイパスして、このリクエストのみが保存をトリガーしないようにする方法はありますか?他のすべてのビューでセッションを手動で保存できることはわかっていますが、それは間違っているようです。要求されたビューをチェックし、このビューでない場合にのみセッションを保存するミドルウェアを作成できる可能性があると思いますが、それが最善の解決策でもあるかどうかはわかりません。

助言がありますか?

前もって感謝します。

4

1 に答える 1

1

私はこれがうまくいくとかなり確信しています。CustomeMiddleWareをsettings.pyMIDDLEWARE_CLASSESに追加しました。また、settings.pyのすべてのリクエストでセッション保存をオフにしました。

class CustomMiddleware(object):
    def process_view(self, request, view_func, view_args, view_kwargs):
        if view_func.__module__ != "exclude.module" and view_func.__name__ != "excludeMethod":
            request.session.save()

ここで問題となるのは、Dajaxiceを使用すると、モジュールと名前がdajaxice_requestとして渡されることです。要求された実際のメソッドを取得する方法がわかりません。たくさんのことを試しましたが、できませんでした。DajaxiceRequestコードをハッキングしたくないが、ハッキングする必要があるかもしれない。

  • 解決:

    この1つのメソッドをjQueryajaxに切り替えました。レコードのバージョンを取得するための単一の呼び出しを行うための新しいurls.pyエントリを作成しました。これにより、process_viewのview_funcが使用可能になるため、このビュー以外で呼び出されたビューでのみセッションを保存できます。ウーフー!私はまだ他のすべてのAJAX方法論にDajaxiceを使用しています。

于 2011-12-29T21:43:50.960 に答える