4

Rest API を使用するために Django Tastypie を使用しています。それはうまくいきます。

ここで、Django フォームで Rest API を使用したいと思います。Web ブラウザーが aPUTまたはDELETEhttp メソッド (GETおよびのみPOST) を送信できないことはわかっています。

たとえば、ExpressJS( NodeJSWeb フレームワーク) で問題を解決するには:

<input type="hidden" name="_method" value="delete"/>

このハックを使用できます。

Django Form を使用して同じことを行う方法はありますか?

4

2 に答える 2

2

TastyPieは、X-Http-Method-Overrideヘッダーを使用してこれを内部的にサポートしていますが、メソッドがオーバーライドするよりもヘッダーにアクセスできるようには思えません。あなたがこれを行うことができるという偶然の機会に、ここを見てください。

最善の策は、おそらく次のようなDjangoミドルウェアを使用することです。

METHODS = [ 'GET', 'PUT', 'POST', 'DELETE' ]

class DjangoMethodMiddleware(object):
    def process_request(self, request):
        meth = request.REQUEST.get('_method', None)
        if meth is None:
            return
        if meth in METHODS:
            request.method = meth
        else:
            pass # TODO: logging?

これをサイトのmiddleware.pyに格納してから、このミドルウェアをDjango設定にロードする必要があります。魔法!

于 2012-10-04T00:17:31.003 に答える
1

このようにjavascriptを使用してPutまたはdeleteを送信できると思います

$("your_form_id").submit(function(e){
    $.ajax({
        url: 'your url',
        type: "PUT",
        data: $("your_form_id").serialize(),
        cache: false,
        dataType: "text",
        success: function(data){
            do_something()
        },
        error: function() {
            console.log("ERROR");
        }
    });
});

または、あなたのこのハック方法でも機能します....サーバー側でこの値を確認し、それに応じて残りのAPIを呼び出す必要があります。

于 2012-04-30T00:14:06.463 に答える