Django+JQuery+Ajax+Postスキームでの問題と解決
問題要求の送信後、サービス側は応答なしDjangoがPOST要求に対して要求ソースを検査し、フォーム方式の提出時: Formに request応答関数の前に、
Jquery POST方式コミット時に、サービス側に@csrf_が追加されましたexempt,Django 1.5バージョン以降、直接POSTでパラメータを取得することができず、 というエラーメッセージが表示されます.
Exception: You cannot access body after reading from request's data stream
実はこのヒントはbodyデータを取得する前に、データストリームが読まれたことを意味します.問題は@csrf_exemptでは、Djangoがrequestの読み取り検証を事前に行っていたため、Djangoサービス側がPOSTリクエストを受信するにはcsrf_をサポートする必要があるという問題が発生しました.exemptですが、この前置を追加すると、POSTパラメータを取得できません.解決策:サービス側の@csrf_を使用しないexemptでは、フロントエンドにcsrftokenを追加し、サービス側がPOST要求を受信できるようにする.$.ajaxSetup({
Ajaxに前処理を追加し、POST要求のたびにcsrftokenが自動的に送信されることを保証し、サービス側でPOSTデータを正常に処理することができます.
命は振り回すことにある~~
`{% csrf_token %}
`のラベルを追加します.`@csrf_exempt
`を追加します.`raw_data = request.body
`でデータを取得すると、Exception: You cannot access body after reading from request's data stream
実はこのヒントはbodyデータを取得する前に、データストリームが読まれたことを意味します.問題は@csrf_exemptでは、Djangoがrequestの読み取り検証を事前に行っていたため、Djangoサービス側がPOSTリクエストを受信するにはcsrf_をサポートする必要があるという問題が発生しました.exemptですが、この前置を追加すると、POSTパラメータを取得できません.
dataType: "json",
beforeSend: function(xhr, settings){
var csrftoken = $.cookie('csrftoken');
xhr.setRequestHeader("X-CSRFToken", csrftoken);
},
}); Ajaxに前処理を追加し、POST要求のたびにcsrftokenが自動的に送信されることを保証し、サービス側でPOSTデータを正常に処理することができます.
命は振り回すことにある~~