如何正确的使用django-csrf

如何正确的使用django-csrf?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

orm表单使用csrf

如何正确的使用django-csrf

a. 基本应用

form表单中添加

{% csrf_token %}

b. 全站禁用

# 'django.middleware.csrf.CsrfViewMiddleware',

c. 局部禁用

'django.middleware.csrf.CsrfViewMiddleware',

fromdjango.views.decorators.csrfimportcsrf_exempt

@csrf_exempt
defcsrf1(request):

ifrequest.method=='GET':
returnrender(request,'csrf1.html')
else:
returnHttpResponse('ok')

d. 局部使用

#'django.middleware.csrf.CsrfViewMiddleware',

fromdjango.views.decorators.csrfimportcsrf_exempt,csrf_protect

@csrf_protect
defcsrf1(request):

ifrequest.method=='GET':
returnrender(request,'csrf1.html')
else:
returnHttpResponse('ok')

ajax提交数据

Ajax提交数据时候,携带CSRF:

a. 放置在data中携带

<formmethod="POST"action="/csrf1.html">
{%csrf_token%}
<inputid="user"type="text"name="user"/>
<inputtype="submit"value="提交"/>
<aonclick="submitForm();">Ajax提交</a>
</form>
<scriptsrc="/static/jquery-1.12.4.js"></script>
<script>
functionsubmitForm(){
varcsrf=$('input[name="csrfmiddlewaretoken"]').val();
varuser=$('#user').val();
$.ajax({
url:'/csrf1.html',
type:'POST',
data:{"user":user,'csrfmiddlewaretoken':csrf},
success:function(arg){
console.log(arg);
}
})
}

</script>

b. 放在请求头中

<formmethod="POST"action="/csrf1.html">
{%csrf_token%}
<inputid="user"type="text"name="user"/>
<inputtype="submit"value="提交"/>
<aonclick="submitForm();">Ajax提交</a>
</form>
<scriptsrc="/static/jquery-1.12.4.js"></script>
<scriptsrc="/static/jquery.cookie.js"></script>

<script>
functionsubmitForm(){
vartoken=$.cookie('csrftoken');
varuser=$('#user').val();
$.ajax({
url:'/csrf1.html',
type:'POST',
headers:{'X-CSRFToken':token},
data:{"user":user},
success:function(arg){
console.log(arg);
}
})
}
</script>

补充知识:在django的form表单及ajax提交的数据中添加认证的csrfmiddlewaretoken

1. 对于ajax提交数据,把下面的代码加入到js的头部,可以保证ajax执行时自动提交参数csrfmiddlewaretoken。

$.ajaxSetup({data: {csrfmiddlewaretoken: '{{ csrf_token }}' }});

2. 对于form表单提交数据,在表单内部加入{% csrf_token %}标签,会自动生成一个input标签

<form>{% csrf_token %}</form>

得到

<form><input name="csrfmiddlewaretoken" value="..." type="hidden"></form>

或者使用js添加:

$("#csrf_token").replaceWith("{% csrf_token %}");

3. 另外记录一下使用模板过滤器处理form.field的方法

$("#{{field.name}}").replaceWith('{{field|linebreaksbr}}');
$(".{{field.name}}").text('{{field.errors|striptags}}');
{{value|linebreaksbr}}:"Joel\nisaslug"=>"Joel<br>isaslug"
{{value|striptags}}:"<b>Joel</b><button>is</button>a<span>slug</span>"=>"Joelisaslug".

看完上述内容,你们掌握如何正确的使用django-csrf的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注恰卡编程网行业资讯频道,感谢各位的阅读!

发布于 2021-03-21 22:39:05
收藏
分享
海报
0 条评论
163
上一篇:如何在YII2框架中使用behavior 下一篇:怎么在SpringBoot中实现一个异步任务
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码