【发布时间】:2017-01-02 16:29:13
【问题描述】:
我正在为我的项目使用数据库支持的会话。我正在尝试使用 AngularJS 通过 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"
}
})
},
}
}
]);
这是我的视图的简化发布方法:
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。奇怪的是,在第二次调用该方法后,会话变量的新值最终会被保存(第二次保存后,data_to_be_fetched 将不再是None)。为什么会这样?它仅在 AJAX 请求期间设置会话变量时发生。
我尝试在更新会话变量后添加以下内容,但行为仍然相同:
request.session.modified = True
我也尝试在设置中添加以下内容,但也无济于事:
SESSION_SAVE_EVERY_REQUEST = True
【问题讨论】:
标签: angularjs ajax django session