【问题标题】:Django session variable not being saved when set using AJAX使用 AJAX 设置时未保存 Django 会话变量
【发布时间】: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


    【解决方案1】:

    问题是使用 localhost:8000 而不是 127.0.0.1:8000。因此始终使用 127.0.0.1:8000。 这对我来说是修复。

    【讨论】:

      猜你喜欢
      • 2015-10-10
      • 1970-01-01
      • 2011-10-20
      • 2018-04-04
      • 2014-05-08
      • 2014-03-18
      • 1970-01-01
      • 2012-09-16
      • 2016-11-07
      相关资源
      最近更新 更多