如何正确的使用django-csrf ?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
<强> orm表单使用csrf 强>
。基本应用
形式表单中添加
{% csrf_token %}
引用>b。全站禁用
# & # 39; django.middleware.csrf.CsrfViewMiddleware& # 39;
引用>,c。局部禁用
,, & # 39; django.middleware.csrf.CsrfViewMiddleware& # 39; ,, 得到才能django.views.decorators.csrf import  csrf_exempt @csrf_exempt才能 def 才能csrf1(请求): ,,,if request.method ==, & # 39;得到# 39;: ,,,,,return 渲染(请求,& # 39;csrf1.html& # 39;) ,,,: ,,,,,return HttpResponse(& # 39;好# 39;)d。局部使用
, #, & # 39; django.middleware.csrf.CsrfViewMiddleware& # 39; ,, 得到才能django.views.decorators.csrf import  csrf_exempt csrf_protect @csrf_protect才能 def 才能csrf1(请求): ,,,if request.method ==, & # 39;得到# 39;: ,,,,,return 渲染(请求,& # 39;csrf1.html& # 39;) ,,,: ,,,,,return HttpResponse(& # 39;好# 39;)<强> ajax提交数据强>
ajax提交数据时候,携带CSRF:
。放置在数据中携带
& lt; form 方法=癙OST", action=?csrf1.html"比; ,,{%,csrf_token %} & lt;才能input id=皍ser",类型=皌ext", name=皍ser",/比; & lt;才能input 类型=皊ubmit", value=疤峤弧?比; & lt;才能a onclick=皊ubmitForm();“在Ajax提交& lt;/a> & lt;/form> & lt; script  src=?静态/jquery-1.12.4.js"祝辞& lt;/script> & lt; script> function 才能;submitForm () { ,,,var csrf =,美元(& # 39;输入[name=癱srfmiddlewaretoken"] & # 39;) .val (); ,,,var user =,美元(& # 39;#用户# 39;).val (); ,,,. ajax({美元 ,,,,,url:, & # 39;/csrf1.html& # 39; ,,,,,类型:,& # 39;文章# 39; ,,,,,数据:,{,“user":用户,& # 39;csrfmiddlewaretoken& # 39;:, csrf}, ,,,,,成功:函数(arg) { ,,,,,,,console.log (arg); ,,,,,} ,,,}) ,,} & lt;/script>b。放在请求头中
& lt; form 方法=癙OST", action=?csrf1.html"比; ,,{%,csrf_token %} & lt;才能input id=皍ser",类型=皌ext", name=皍ser",/比; & lt;才能input 类型=皊ubmit", value=疤峤弧?比; & lt;才能a onclick=皊ubmitForm();“在Ajax提交& lt;/a> & lt;/form> & lt; script  src=?静态/jquery-1.12.4.js"祝辞& lt;/script> & lt; script  src=?静态/jquery.cookie.js"祝辞& lt;/script> & lt; script> function 才能;submitForm () { ,,,var token =, .cookie美元(& # 39;csrftoken& # 39;); ,,,var user =,美元(& # 39;#用户# 39;).val (); ,,,. ajax({美元 ,,,,,url:, & # 39;/csrf1.html& # 39; ,,,,,类型:,& # 39;文章# 39; ,,,,,头:{& # 39;X-CSRFToken& # 39;:,令牌}, ,,,,,数据:,{,“user":用户}, ,,,,,成功:函数(arg) { ,,,,,,,console.log (arg); ,,,,,} ,,,}) ,,} & lt;/script><强>补充知识:强> <强>在django的形式表单及ajax提交的数据中添加认证的csrfmiddlewaretoken 强>
1。对于ajax提交数据,把下面的代码加入到js的头部,可以保证ajax执行时自动提交参数csrfmiddlewaretoken。
美元。ajaxSetup({数据:{csrfmiddlewaretoken: & # 39; {{csrf_token}} & # 39;}});
引用>2。对于形式表单提交数据,在表单内部加入{% csrf_token %}标签,会自动生成一个输入标签
& lt; form> {% csrf_token %} & lt;/form>
引用>得到
& lt; form> & lt;输入name=癱srfmiddlewaretoken"价值=https://www.yisu.com/zixun/薄眛ype="隐藏"> 形式>
引用>或者使用js添加:
$ (“# csrf_token") .replaceWith (“{% csrf_token %}“);
引用>3。另外记录一下使用模板过滤器处理的形式。场的方法
美元(“# {{,field.name }}“) .replaceWith(& # 39;{{,领域| linebreaksbr }} & # 39;); $ (“。{{,field.name }}“)。text (& # 39; {{, field.errors | striptags }} & # 39;); null null如何正确的使用django-csrf