如何正确的使用django-csrf
如何正确的使用django-csrf?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
orm表单使用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的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注恰卡编程网行业资讯频道,感谢各位的阅读!
推荐阅读
-
浅析Django接口版本控制
-
Django+Celery实现定时任务的示例
-
Python(django中如何使用restful框架)
-
Django实现drf搜索过滤和排序过滤
-
Django中怎么将ValuesQuerySet转换成json
今天就跟大家聊聊有关Django中怎么将ValuesQuerySet转换成json,可能很多人都不太了解,为了让大家更加了解,小编...
-
Django分页器的使用方法
这篇文章主要介绍了Django分页器的使用方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面...
-
Python Django搭建文件下载服务器的实现shili
-
在Django中如何使用MQTT的方法
这篇文章主要介绍了在Django中如何使用MQTT的方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有...
-
Django开发RESTful API怎么实现增删改查
-
Django如何显示可视化图表的实践