在Django框架中使用Ajax进行POST数据提交时必须携带csrf_token
csrf_token这是一种对为了防止脚本等非人为方式访问网址时的一种保护措施
前端可以使用这几种方法:
1、表单提交Post请求,隐藏字段就保存的csrf_token的值;
2、有些情况除了表单参数还有其他数据:
(1)获取表单对象,直接往表单对象添加数据,然后提交;
(2)自己组装JSON格式的数据,通过ajax发起请求,直接把csrf_token做为一个参数即可:
var post_data = {
"name": "zhangsan",
"age": 18,
"csrfmiddlewaretoken": "{{ csrf_token }}"
}
12345
(3)ajax钩子函数
$.ajaxSetup({
data: {csrfmiddlewaretoken: ‘{{ csrf_token }}‘}
});
后端可以采用这种方法:
view.py
from django.views.decorators.csrf import ensure_csrf_cookie
@csrf_exempt
def my_view(request):
from django.views.decorators.csrf import csrf_protect
or
from django.views.decorators.csrf import requires_csrf_token
or
from django.views.decorators.csrf import ensure_csrf_cookie
from django.views.decorators.csrf import requires_csrf_token
from django.shortcuts import render,HttpResponse
@requires_csrf_token
def my_view(request):
c = {}
c.update(csrf(request))
return HttpResponse("value", c)