Django项目报错: 禁止访问(403),CSRF验证失败,相应中断

若是想要取消表单的CSRF防御,能够在模板上删除{% csrf_token %}, 而且在相应的视图函数中添加装饰器@csrf_exempt, 代码以下:javascript

 

from django.views.decorators.csrf import csrf_exempthtml

@csrf_exempt前端

def registerView(request):java

  passajax

  return render(request,'user.html',locals())django

 

若是只是在模板上删除{% csrf_token %},并无在相应的视图函数中设置过滤器@csrf_exempt,那么当用户提交表单时,程序因CSRF验证失败而抛出403异常的页面,以下图:服务器

 

 最后还有一种状况比较特殊,若是在配置文件setting.py 中删除了中间件CsrfViewMiddleware,这样是整个网站都取消了CSRF防御。在全站没有CSRF防御的状况下,又想对某些请求设置CERF防御,那么在模板上添加模板语法{% scrf_token %},而后在相应的视图函数中添加装饰器@csrf_protect便可实现 ,方法与上相似。
函数

 

值得注意的是,在平常开发中,若是某些网页是使用前端的Ajax实现表单提交的,那么Ajax向服务器发送POST请求时,请求参数必须添加csrf_token的信息,不然服务器会视该请求为恶意请求。实现代码以下:网站

 

<script> function submitForm(){ var csrf = $('input[name="csrfmiddlewaretoken"]').val(); var user = $('#user').val(); var password = $('#password').val(); $.ajax({ url : '/csrf1.html', type : 'POST', data : { "user":user, "password":password, "csrfmiddlewaretoken":csrf} success:function(arg){ console.log(arg); } }) } </script> 
相关文章
相关标签/搜索