Django フレームワークで ajax post メソッドを使用する方法

亚连
リリース: 2018-05-25 09:42:29
オリジナル
2934 人が閲覧しました

Django は、Python で書かれたオープンソースの Web アプリケーション フレームワークです。この記事では、Django フレームワークがどのように ajax post メソッドを使用するかを紹介します。興味のある方は、ぜひ一緒に学びましょう。Django は、Python で書かれたオープンソースの Web アプリケーション フレームワークです。パイソン。 MVC ソフトウェア設計パターン、つまりモデル M、ビュー V、コントローラー C が採用されています。もともとは、Lawrence Publishing Group の一部のニュース コンテンツ ベースの Web サイトを管理するために開発された、つまり CMS (Content Management System) ソフトウェアです。そして 2005 年 7 月に BSD ライセンスに基づいてリリースされました。このフレームは、ベルギーのジプシージャズギタリスト、ジャンゴ・ラインハルトにちなんで名付けられました。

今日、jQueryのajaxを呼び出そうとしたときに問題が見つかりました。つまり、サーバーはGETメソッドを使用すると正常に戻ることができますが、POSTメソッドを使用すると正常に戻らないということです。その後、フォームベースの POST メソッドのテストも機能しませんでした。 POST が HTTP 403 エラーを報告する限り!非常に奇妙な。 。 。

インターネットで多くの情報を検索した結果、Django のクロスサイト リクエスト フォージェリ保護メカニズムの問題が原因であることがわかりました。このメカニズムは、CSRF 攻撃から保護するためのものです。 crsf 攻撃とは何ですか? Taolin ブログに比較的簡単に説明されています。解決策 Django の公式 Web サイトに http://docs.djangoproject.com/en/dev/ref/contrib/csrf/ が用意されています。手順に従って修正すると、ajax がスムーズに投稿できるようになります。


具体的な方法としては、まずフォームのPOSTを解決します。 settings.py ファイルで MIDDLEWARE_CLASSES を見つけて、ミドルウェア「django.middleware.csrf.CsrfViewMiddleware」を追加します。 変更されたコードは次のとおりです。フォームベースの POST 送信における HTTP 403 の問題を解決します。このように ajax の Post submit を変更するだけでは十分ではありません。また、送信ごとに Cookie 処理プロセスを接続する必要があります。つまり、送信するたびにこのプロセスがトリガーされ、送信された http ヘッダーに csrf トークンが追加されます。幸いなことに、jQuery を使用して ajax を処理すると、Django は問題を解決するコードを直接送信します。別のjsファイルに入れてhtmlページに導入します。この js ファイルは、jquery js ファイルをインポートした後にインポートする必要があることに注意してください。次のように、コードを直接コピーしました。


Js コード

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', #加入这个中间件 
)
ログイン後にコピー


この苦労の後、ようやく ajax を使用して Django と正常に通信できるようになりました。

Django での ajax の使用


フロントエンドの ajax コードは次のとおりです:


$('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 + &#39;=&#39;)) { 
     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(&#39;csrftoken&#39;)); 
 } 
});
ログイン後にコピー

バックエンドの対応するコードリターンメソッドは次のとおりです:

$.ajax({
 type:&#39;GET&#39;,
 url:&#39;/store/ds_mgmt_wx/ajax_handle&#39;,
 dataType:&#39;html&#39;,
 success:function(data)
  {
   alert(data);
  },
 error:function(data)
 {
  alert(data); 
 }
});
ログイン後にコピー

上記は私が皆さんのためにまとめたものです。将来皆さんのお役に立てれば幸いです。 関連記事:

動的ページングを実装するajax + jtemplateの詳細説明

リクエスト処理中に進行状況を表示するAjaxの簡単な実装

JQuery Ajaxは動的にテーブルを生成します


以上がDjango フレームワークで ajax post メソッドを使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!