使用 AJAX 设置时未保存 Django 会话变量
Posted
技术标签:
【中文标题】使用 AJAX 设置时未保存 Django 会话变量【英文标题】:Django session variable not being saved when set using AJAX 【发布时间】: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
【问题讨论】:
【参考方案1】:问题是使用 localhost:8000 而不是 127.0.0.1:8000。因此始终使用 127.0.0.1:8000。 这对我来说是修复。
【讨论】:
以上是关于使用 AJAX 设置时未保存 Django 会话变量的主要内容,如果未能解决你的问题,请参考以下文章
使用 gorilla 会话时未保存 golang 中的会话变量
使用 Django admin 时未保存 ManyToMany 字段