我在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'
答案 0 :(得分:0)
关于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()。