1

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

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

私の問題は、データのバージョンをチェックするためにAJAX呼び出しが行われたときに、変更されているかどうかを確認するためにセッションも保存されるため、セッションはどれくらい長くページ無人。

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

提案がありますか?

ありがとうございます。

答えて

1

これはうまくいくと私は確信しています。 settings.py MIDDLEWARE_CLASSESにCustomeMiddleWareを追加しました。また、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コードをハックしたくないかもしれませんが、する必要があります。

  • SOLUTION:

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