文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Django框架怎么使用ajax的post方法

2023-06-08 09:08

关注

这篇文章主要介绍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攻击。。

具体办法是,首先解决表单的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')

以上是“Django框架怎么使用ajax的post方法”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网行业资讯频道!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     801人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     348人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     311人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     432人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     220人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯