私は自分のプロジェクトにデータベースバックアップセッションを使用しています。私はAngularJSを使用してAJAXのPOSTリクエストを経由してセッション変数の値を更新しようとしています:ここでDjangoセッション変数がAJAXを使用して設定されたときに保存されない
app.factory('SomeFactory', ['$http', 'djangoUrl',
function ($http, djangoUrl) {
return {
getSomeDataAndUpdateSessionVar: function() {
return $http({
method: 'POST',
url: djangoUrl.reverse('some_app:list'),
data: {
param1: "param1"
}
})
},
}
}
]);
は私のビューの簡略化され、POSTメソッドである:
class DocumentListView(JsonRequestResponseMixin, View):
def post(self, request, *args, **kwargs):
request_data = json.loads(request.body)
data_to_be_fetched = request.session.get("data_to_be_fetched", None)
if not data_to_be_fetched:
data_to_be_fetched = fetch_data(request_data)
request.session["data_to_be_fetched"] = data_to_be_fetched
print request.session.get("data_to_be_fetched") # This will return the updated value
return HttpResponse(json.dumps(data_to_be_fetched), content_type="application/json")
セッション変数があるように思えます上記のメソッドを再度呼び出すと、data_to_be_fetched
の値はまだNone
になるので、保存されません。変わったことは、メソッドを2回目に呼び出した後に、セッション変数の新しい値が最後に保存されるということです(data_to_be_fetched
は2回目に保存した後にフェッチしたときにはもはやNone
になりません)。それはなぜそれのような振る舞いですか? AJAXリクエスト中にセッション変数を設定する場合にのみ発生します。
私は、セッション変数を更新した後、以下を追加しようとしたが、動作は同じです:
request.session.modified = True
私も設定に以下を追加してみましたが、それはどちらか助けていません。
SESSION_SAVE_EVERY_REQUEST = True