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 ファイルをインポートした後にインポートする必要があることに注意してください。次のように、コードを直接コピーしました。
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 と正常に通信できるようになりました。
$('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({ type:'GET', url:'/store/ds_mgmt_wx/ajax_handle', dataType:'html', success:function(data) { alert(data); }, error:function(data) { alert(data); } });
上記は私が皆さんのためにまとめたものです。将来皆さんのお役に立てれば幸いです。 関連記事:
動的ページングを実装するajax + jtemplateの詳細説明リクエスト処理中に進行状況を表示するAjaxの簡単な実装
JQuery Ajaxは動的にテーブルを生成します
以上がDjango フレームワークで ajax post メソッドを使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。