如何将本地存储数据提交到 Django

How can I submit localStorage data to Django?

本文关键字:数据 提交 Django 存储      更新时间:2023-09-26

我在localStorage中有数据,我想通过POST请求将其与userid一起提交给Django。我该如何完成这项工作?

1)发送Ajax请求:它需要csrf令牌,我无法使其有效。

  function submitData() {
  // send result to server
    var data = localStorage.getItem("groups");
    var userid = {{user.userid}};
    console.log(data);
    $.ajax({
      url:"/interface/submit/",
      type:"POST",
      data: { group:data,
              userid:userid,
              csrfmiddlewaretoken: '{{ csrf_token }}'},
      success:function() {
        alert("Submitted succeffully");
        window.location = "/interface/";
      }
    })
  }

2)使用Django表单:目前我只能从字段中获取信息,而不是localStorage。

  <form action="/interface/submit/" method="post">
    {% csrf_token %}
    <input type="submit" value="Submit">
  </form>

使用第一种方法时出错:

请求信息

GET
Variable    Value
csrfmiddlewaretoken 
u'{{ csrf_token }}'
group   
u'371,197,220,306,213,328,399,373,283,end,371,197,220,306,213,328,399,373,283,end,371,197,220,end,'
POST
No POST data
FILES
No FILES data
COOKIES
Variable    Value
csrftoken   
'F8jc4jObrxI2bQ6Y3CgCiuf6MTOpf2Uo'
sessionid   
'8uvrhe9yytpam38h5xb4tnvz8ijiui4p'

关于 1) 您的模板是否在使用 ajax 代码的地方呈现带有 {% csrf_token %} 的表单?如果没有,Django 将不会发送带有响应的新 csrf cookie。

https://docs.djangoproject.com/en/dev/ref/csrf/#ajax

如果你的视图没有呈现包含csrf_token模板标签的模板,Django 可能不会设置 CSRF 令牌 cookie。这在表单动态添加到页面的情况下很常见。为了解决这个问题,Django 提供了一个视图装饰器,它强制设置 cookie:ensure_csrf_cookie()。