版权声明:本文为博主原创文章,欢迎转载,请注明出处 https://blog.csdn.net/mouday/article/details/84143834
CSRF (Cross-site request forgery)
Django后台设置
全局和局部设置
# 全站使用
'django.middleware.csrf.CsrfViewMiddleware',
# 局部禁用
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
def csrf_demo(request):
if request.method == 'POST':
return HttpResponse('POST OK')
# 全站禁用
# 'django.middleware.csrf.CsrfViewMiddleware',
# 局部使用
from django.views.decorators.csrf import csrf_protect
@csrf_protect
def csrf_demo(request):
if request.method == 'POST':
return HttpResponse('POST OK')
前端使用
Form表单中使用
Ajax请求使用
- 获取:Form表单 或 cookie
- 使用:data数据 或 headers
<!-- Form表单中使用 -->
<form method="POST" action="/csrf_demo.html">
{% csrf_token %}
<input id="user" type="text" name="user" />
<input type="submit" value="提交"/>
</form>
<!-- Ajax中使用 -->
<script>
function submitForm(){
// 从form 表单中获取
var token = $('input[name="csrfmiddlewaretoken"]').val();
// 从cookie 中获取
// var token = $.cookie('csrftoken');
var user = $('#user').val();
$.ajax({
url: '/csrf_demo.html',
type: 'POST',
// data 数据中使用
data: {
"user":user,
'csrfmiddlewaretoken': token
},
// headers 中使用
// headers:{'X-CSRFToken': token},
success:function(arg){
// do something
}
})
}
</script>