如何正确的使用django-csrf

  介绍

如何正确的使用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