Djangoフレームワークajaxのpostメソッドの使用方法

3260 ワード

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、その中に1つのミドルウェアを加えます:'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提出はこのように変更するだけではだめです.コミットするたびにクッキー処理プロセスをフックする必要があります.すなわち,コミットするたびに,このプロセスがトリガーされ,コミットされた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方法をどのように使うかについて紹介しました.見終わった後、どんな感想がありますか.皆さん、自分の見解を共有してください.皆さんの気持ちが楽しくて、仕事が順調であることを祈っています.