• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Django框架如何使用ajax的post方法

jquery 搞代码 4年前 (2021-12-27) 32次浏览 已收录 0个评论

Django是一个开放源代码的Web应用框架,由Python写成,本文给大家介绍Django框架如何使用ajax的post方法,感兴趣的朋友跟着小编一起来学习学习吧

Django是一个开放源代码的Web应用框架,由Python写成。采用了MVC的软件设计模式,即模型M,视图V和控制器C。它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的,即是CMS(内容管理系统)软件。并于2005年7月在BSD许可证下发布。这套框架是以比利时的吉普赛爵士吉他手Django Reinhardt来命名的。

今天在尝试调用jQuery的ajax时发现一个问题,就是使用GET方法服务器可以正常返回,但是使用POST方法却不行。后来再测试表单方式的POST的方法也不行。只要POST必报HTTP 403错误!非常奇怪。。。   

在网上搜了一大堆资料以后原来是因为Django的Cross Site Request Forgery protection机制的问题。这个机制是为了保护不受csrf攻击。什么是crsf攻击,桃林博客中有一段较为浅显的讲解。解决方案Django的官网已经提供了http://docs.djangoproject.com/en/dev/ref/contrib/csrf/,根据说明修改后,ajax可以顺利Post了。

具体办法是,首先解决表单的POST。在settings.py文件中找到 MIDDLEWARE_CLASSES,在其中加入一个中间件:’django.middleware.csrf.CsrfViewMiddleware’ ,修改后的代码如下:

Python代码

 MIDDLEWARE_CLASSES = ( 'django.middleware.common.CommonMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.csrf.CsrfResponseMiddleware', #加入这个中间件 ) 

     经过这番修改,可以解决表单方式的POST提交HTTP 403问题了。ajax的Post提交仅这样改还不行。还需要钩上一个每次提交时的cookie处理过程。也就是每次提交的时候,都触发这个过程,在提交的http头上加入csrf token。不过还好,如果你是用jQuery来处理ajax的话,Django直接送了一段解决问题的代码。把它放在一个独立的js文件中,在html页面中都引入即可。注意这个js文件必须在jquery的js文件引入之后,再引入。代码我直接复制过来了,如下:

Js代码

 $('html').ajaxSend(function(event, xhr, settings) { function getCookie(name) { var cookieValue = null; if (document.cookie && document.cookie != '') { var cookies = document.cookie.split(';'); for (v<strong style="color:transparent">来源gao@daima#com搞(%代@#码网</strong>ar i = 0; i <cookies.length; i++) { var cookie = jQuery.trim(cookies[i]); // Does this cookie string begin with the name we want? if (cookie.substring(0, name.length + 1) == (name + '=')) { cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); break; } } } return cookieValue; } if (!(/^http:.*/.test(settings.url) || /^https:.*/.test(settings.url))) { // Only send the token to relative URLs i.e. locally. xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken')); } }); 

 经过这番折腾,算是可以正常用ajax与Django通信了。

Django中ajax的使用

 前端的ajax代码如下所示:

 $.ajax({ type:'GET', url:'/store/ds_mgmt_wx/ajax_handle', dataType:'html', success:function(data) { alert(data); }, error:function(data) { alert(data); } });

后端的相应代码的返回方法如下:

 if act_job == 'ajax_handle': return HttpResponse('ajax_handle')

关于Django框架如何使用ajax的post方法就介绍完了,看完之后有何感想,欢迎小伙伴们分享自己的见解,祝大家心情愉快,工作顺利。

以上就是Django框架如何使用ajax的post方法的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Django框架如何使用ajax的post方法

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址