国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > AJAX > 正文

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

2024-09-01 08:28:26
字體:
來源:轉載
供稿:網友

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'));  } });             
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 遵义市| 金塔县| 会同县| 宜阳县| 开鲁县| 桂林市| 宁强县| 乐都县| 黔东| 高陵县| 怀柔区| 察雅县| 周至县| 平邑县| 日土县| 贵德县| 青岛市| 公安县| 临猗县| 咸宁市| 曲靖市| 台前县| 桂林市| 呼和浩特市| 隆化县| 永年县| 泽州县| 二手房| 惠水县| 宁蒗| 合山市| 嘉兴市| 印江| 甘孜| 黎城县| 凉城县| 昆明市| 运城市| 当阳市| 隆林| 舒城县|