您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

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

2024/11/30 6:07:45发布21次查看
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 (var 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')
上面是我整理给大家的,希望今后会对大家有帮助。
相关文章:
详解ajax +jtemplate实现动态分页
ajax在请求过程中显示进度的简单实现
jquery ajax动态生成table表格
以上就是django框架如何使用ajax的post方法的详细内容。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product