Django処理PUT/DELETE要求

1710 ワード

DjangoがPUT要求を処理するには、いくつかの点に注意する必要があります.
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リクエストの送信
注意すべき点:
  • 設定typeがPUT、DELETE同理
  • urlは、/末尾
         $.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')