【问题标题】:Django request.session not working properlyDjango request.session 无法正常工作
【发布时间】:2022-01-31 01:06:44
【问题描述】:

我正在创建一个 Web 应用程序,我正在使用 ajax 将数据从前端发送到后端,这样我就可以处理表单并将它们保存到数据库中。我将数据从 ajax 发送到 get-data 方法,然后从那里将其保存到会话中,当我访问 /success 页面并尝试从会话中获取相同的数据时,它告诉我密钥不存在.这怎么可能?这是下面的代码。

$.ajax({
      type: "POST",
      url: "/get-data/",
      data: JSON.stringify(obj),
      dataType: "text",
      headers: { "X-CSRFToken": getCookie("csrftoken") },
      success: function (response) {
        console.log("success"); // i get this, so i it means that the ajax works properly.
      },
      error: function (response, err, err2) {
        console.log(err2);
      },
    });
def get_data(request):
    if request.method == "POST":
        if is_ajax(request):
            rec_data = json.loads(request.body)
            print("the request came")
            request.session["data_check_form"] = rec_data
            print("everything set")
            print(request.session["data_check_form"])  # i print this and i get the json file properly
            return JsonResponse({"success": "200"})
def success_view(request):
    print("test")
    data = request.session.get("data_check_form", False) 
    print(data) # i get false
    ...

【问题讨论】:

    标签: javascript django ajax web


    【解决方案1】:

    session 发生任何更改后使用request.session.modified = True 作为

    def get_data(request):
        if request.method == "POST":
            if is_ajax(request):
                rec_data = json.loads(request.body)
                print("the request came")
                request.session["data_check_form"] = rec_data
                request.session.modified = True
                print("everything set")
                print(request.session["data_check_form"])  # i print this and i get the json file properly
                return JsonResponse({"success": "200"})
    

    或者您可以在settings.py 中将SESSION_SAVE_EVERY_REQUEST 设置为True,这将按照所述将每个请求的会话保存到数据库

    要更改此默认行为,请将 SESSION_SAVE_EVERY_REQUEST 设置设置为 True。当设置为 True 时,Django 将在每次请求时将会话保存到数据库中。

    【讨论】:

    • 我试过了,还是不行。
    • 你也不能在settings.py中设置SESSION_SAVE_EVERY_REQUEST =True
    • 我也试过了,还是一样的错误。
    • 你能分享你的印刷品rec_data你得到了什么吗?
    • 是的,在 get_data() 中,我将 rec_data 保存到会话中,然后打印出来。我得到了结果,但是当我从 success_view() 打印 request.session["data_check_form"] 时,它的行为就像会话中甚至不存在该密钥一样。
    猜你喜欢
    • 2013-10-21
    • 2014-03-07
    • 2013-02-25
    • 2015-01-06
    • 1970-01-01
    • 2017-08-13
    • 2016-06-05
    • 2019-02-15
    相关资源
    最近更新 更多