ホームページ >ウェブフロントエンド >jsチュートリアル >Django フレームワークで ajax post メソッドを使用する方法 (グラフィック チュートリアル)

Django フレームワークで ajax post メソッドを使用する方法 (グラフィック チュートリアル)

亚连
亚连オリジナル
2018-05-22 09:13:571692ブラウズ

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 ファイルをインポートした後にインポートする必要があることに注意してください。次のように、コードを直接コピーしました。

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 + &#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 を使用して Django と正常に通信できるようになりました。

Django での ajax の使用

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

$.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); 
 }
});

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

if act_job == &#39;ajax_handle&#39;:
  return HttpResponse(&#39;ajax_handle&#39;)

上記は私がコンパイルしたものです皆さん、今後皆さんのお役に立つことを願っています。

関連記事:

Django の ajax ポスト複合オブジェクトを取得する方法 (グラフィック チュートリアル)

Ajax を使用して Razor ページを部分的に更新する (グラフィック チュートリアル)

Ajax の応答を介してバックグラウンドでデータを渡すことについて質問(コード、詳細な分析を含む)

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。