Html页面的表单没有完全使用Django
的form进行渲染,故Js
不能使用$('#ClassID').serialize()
来获取Csrf
和Data
,然后报错CSRF token missing or incorrect.
Django
第一次响应来自某个客户端的请求时,会在服务器端随机生成一个Token
,把这个Token
放在Cookie
里。然后每次Post
请求都会带上这个Token
, 这样可以能避免被Csrf
攻击。所以会在每个Html
模板中增加一个 {% csrf_token %}
标签。
return render_to_response('Account/Login.html',data,context_instance=RequestContext(request))
return HttpResponse(_template.render(context, request))
return render(request, 'xxx.html', data)
<script>
const csrftoken = document.querySelector('[name=csrfmiddlewaretoken]').value;
</script>
<script>
$.ajax({
headers: {'X-CSRFToken': csrf_token},
})
</script>