2

djangoサーバーを実行していますが、投稿を行うと403メッセージが表示されます。私の質問は、以下に示すようにjson呼び出しを行うには、apacheを実行する必要があるということです。そうでなければ、私は何を間違っているのですか?

htmlページには、最新のjqueryファイルのみを含めました。

 var snddata = {};
  snddata["username"] = username;
  snddata["firstname"] = firstname;
  snddata["lastname"] = lastname;
  snddata["usertype"] = $("#usertype").val();
  snddata["address"] = address;
  snddata["emailid"] = emailid;
  snddata["empid"] = empid;
  $.post("/home/", snddata, 
     function callbackHandler(data, textstatus) 
     {
     if (data.status == 1)
     {
        alert("User added successfully");
     }
     else 
     {
        alert(data.msg);
     }
     }, 
     "json"
     );
4

3 に答える 3

4

Django には csrf 保護があり、POST リクエストごとに「csrfmiddlewaretoken」を配置する必要があります。次のコード行を追加してみてください。

snddata["csrfmiddlewaretoken"] = $('input[name=csrfmiddlewaretoken]').val();

csrf_token で非表示の入力フィールドを返すこのタグをフォームに挿入する必要があります。

{% csrf_token %}
于 2012-07-16T15:16:31.390 に答える
2

アラスデアが言ったことに付け加えます。

{% csrf_token %}html ページのどこかに追加します。snddata["csrfmiddlewaretoken"] = $("#csrfmiddlewaretoken").val();上記のJavaScriptに追加します。

これにより、CSRF トークンを値として持つ 'input' 要素が追加されます。そしてjs部分はそれをフォームで送信します。

@csrf_exemptビューにデコレータがない場合、または CSRF が無効になっている場合を除き、POST リクエストには CSRF トークンが必要です。

応答コード 403 は、Forbidden 要求コードです。

于 2012-07-16T19:30:55.477 に答える
1

403 エラーは、Django のクロス サイト リクエスト フォージェリ保護 (CSRF) 保護が原因です。

詳細については、Django CSRF ドキュメント ページを参照してください。このページには、jQuery ajax リクエストを機能させるために使用できる便利なスニペットが含まれています。

于 2012-07-16T15:12:39.540 に答える