最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2015年09月16日 10:13:20   投稿:mrr  
Django是一個(gè)開(kāi)放源代碼的Web應(yīng)用框架,由Python寫(xiě)成,本文給大家介紹Django框架如何使用ajax的post方法,感興趣的朋友跟著小編一起來(lái)學(xué)習(xí)學(xué)習(xí)吧

Django是一個(gè)開(kāi)放源代碼的Web應(yīng)用框架,由Python寫(xiě)成。采用了MVC的軟件設(shè)計(jì)模式,即模型M,視圖V和控制器C。它最初是被開(kāi)發(fā)來(lái)用于管理勞倫斯出版集團(tuán)旗下的一些以新聞內(nèi)容為主的網(wǎng)站的,即是CMS(內(nèi)容管理系統(tǒng))軟件。并于2005年7月在BSD許可證下發(fā)布。這套框架是以比利時(shí)的吉普賽爵士吉他手Django Reinhardt來(lái)命名的。

今天在嘗試調(diào)用jQuery的ajax時(shí)發(fā)現(xiàn)一個(gè)問(wèn)題,就是使用GET方法服務(wù)器可以正常返回,但是使用POST方法卻不行。后來(lái)再測(cè)試表單方式的POST的方法也不行。只要POST必報(bào)HTTP 403錯(cuò)誤!非常奇怪。。。   

在網(wǎng)上搜了一大堆資料以后原來(lái)是因?yàn)镈jango的Cross Site Request Forgery protection機(jī)制的問(wèn)題。這個(gè)機(jī)制是為了保護(hù)不受csrf攻擊。什么是crsf攻擊,桃林博客中有一段較為淺顯的講解。解決方案Django的官網(wǎng)已經(jīng)提供了http://docs.djangoproject.com/en/dev/ref/contrib/csrf/,根據(jù)說(shuō)明修改后,ajax可以順利Post了。

具體辦法是,首先解決表單的POST。在settings.py文件中找到 MIDDLEWARE_CLASSES,在其中加入一個(gè)中間件:'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', #加入這個(gè)中間件 
) 

     經(jīng)過(guò)這番修改,可以解決表單方式的POST提交HTTP 403問(wèn)題了。ajax的Post提交僅這樣改還不行。還需要鉤上一個(gè)每次提交時(shí)的cookie處理過(guò)程。也就是每次提交的時(shí)候,都觸發(fā)這個(gè)過(guò)程,在提交的http頭上加入csrf token。不過(guò)還好,如果你是用jQuery來(lái)處理ajax的話,Django直接送了一段解決問(wèn)題的代碼。把它放在一個(gè)獨(dú)立的js文件中,在html頁(yè)面中都引入即可。注意這個(gè)js文件必須在jquery的js文件引入之后,再引入。代碼我直接復(fù)制過(guò)來(lái)了,如下:

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')); 
 } 
}); 

 經(jīng)過(guò)這番折騰,算是可以正常用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); 
 }
});

后端的相應(yīng)代碼的返回方法如下:

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

關(guān)于Django框架如何使用ajax的post方法就介紹完了,看完之后有何感想,歡迎小伙伴們分享自己的見(jiàn)解,祝大家心情愉快,工作順利。

相關(guān)文章

最新評(píng)論

普兰店市| 迁安市| 苏州市| 萨迦县| 杭锦旗| 杨浦区| 景德镇市| 绵阳市| 玛曲县| 宁晋县| 杭锦后旗| 安徽省| 永和县| 肥城市| 新干县| 卫辉市| 福州市| 庐江县| 茂名市| 静乐县| 西林县| 孟州市| 高雄市| 康马县| 绩溪县| 安岳县| 山西省| 贺州市| 基隆市| 彰武县| 临夏市| 莱芜市| 万源市| 房产| 龙江县| 崇文区| 濉溪县| 龙口市| 阳春市| 茂名市| 凭祥市|