ホームページ >ウェブフロントエンド >jsチュートリアル >Django フレームワークで ajax post メソッドを使用する方法 (グラフィック チュートリアル)
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」を追加します。 変更されたコードは次のとおりです:
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 submit を変更するだけでは十分ではありません。また、送信ごとに Cookie 処理プロセスを接続する必要があります。つまり、送信するたびにこのプロセスがトリガーされ、送信された http ヘッダーに csrf トークンが追加されます。幸いなことに、jQuery を使用して ajax を処理すると、Django は問題を解決するコードを直接送信します。別のjsファイルに入れてhtmlページに導入します。この js ファイルは、jquery 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 と正常に通信できるようになりました。
フロントエンドの ajax コードは次のとおりです:
$.ajax({ type:'GET', url:'/store/ds_mgmt_wx/ajax_handle', dataType:'html', success:function(data) { alert(data); }, error:function(data) { alert(data); } });
バックエンドの対応するコードの return メソッドは次のとおりです:
if act_job == 'ajax_handle': return HttpResponse('ajax_handle')
上記は私がコンパイルしたものです皆さん、今後皆さんのお役に立つことを願っています。
関連記事:
Django の ajax ポスト複合オブジェクトを取得する方法 (グラフィック チュートリアル) Ajax を使用して Razor ページを部分的に更新する (グラフィック チュートリアル) Ajax の応答を介してバックグラウンドでデータを渡すことについて質問(コード、詳細な分析を含む)以上がDjango フレームワークで ajax post メソッドを使用する方法 (グラフィック チュートリアル)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。