Django処理PUT/DELETE要求
1710 ワード
DjangoがPUT要求を処理するには、いくつかの点に注意する必要があります.
CSRF構成
クロスバウンド攻撃を防ぐため、Djangoのデフォルトでは、POST/PUT/DELETEのいくつかの操作についてcsrf tokenチェックが行われます.POSTはpostのパラメータに入れることができるが、DjangoはPUT/DELETEに対してHeaderを検査することによってcsrf tokenを検査するしかない.したがって、HTMLで送信を確認する前にAjaxのヘッダが設定されている必要があります.
AjaxによるPUT/DELETEリクエストの送信
注意すべき点:設定typeがPUT、DELETE同理 urlは、/末尾 でなければならない.
バックグラウンド処理パラメータ
DjangoはPUT/DELETEリクエストに対してPOST/GETのように辞書構造を持っていない.手動でrequestを処理する必要があります.body取得パラメータ:
CSRF構成
クロスバウンド攻撃を防ぐため、Djangoのデフォルトでは、POST/PUT/DELETEのいくつかの操作についてcsrf tokenチェックが行われます.POSTはpostのパラメータに入れることができるが、DjangoはPUT/DELETEに対してHeaderを検査することによってcsrf tokenを検査するしかない.したがって、HTMLで送信を確認する前にAjaxのヘッダが設定されている必要があります.
function csrfSafeMethod(method) {
// these HTTP methods do not require CSRF protection
return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
}
$.ajaxSetup({
beforeSend: function(xhr, settings) {
if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
xhr.setRequestHeader("X-CSRFToken", csrftoken);
}
}
});
AjaxによるPUT/DELETEリクエストの送信
注意すべき点:
$.ajax({
url: dbUrl + tableName + "/", // Append back slash for put request
type: "PUT",
data: {"key": key, "field": field, "field-value": input.value},
success: function(result) {
input.style.backgroundColor = "#b3ffb3";
},
error: function(event, XMLHttpRequest, ajaxOptions, thrownError) {
input.style.backgroundColor = "#ffad99";
input.value = oldValue
}
});
バックグラウンド処理パラメータ
DjangoはPUT/DELETEリクエストに対してPOST/GETのように辞書構造を持っていない.手動でrequestを処理する必要があります.body取得パラメータ:
from django.http import QueryDict
put = QueryDict(request.body)
key = put.get('key')
field = put.get('field')
field_value = put.get('field-value')