2012-04-29 63 views
2

私はDjango Tastypieを使ってRest APIを持っています。それはうまくいく。Django形式PUTとDELETE httpメソッド

ここで、私は、残りのAPIをdjango形式で使用したいと思います。私はWebブラウザがPUTまたはDELETEhttp方法(GETPOSTのみ)を送信できないことを知っています。例えば

は、ExpressJSNodeJS Webフレームワーク)の問題を解決するために:

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

私はこのハックを使用することができます。

Djangoフォームを使用して同じことを行う方法ですか?

答えて

0

私はあなたのこのハック方法がうまくいくこの

$("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"); 
     } 
    }); 
}); 

、あるいはのようなJavaScriptを使用して....あなたは、サーバー側でこの値をチェックする必要があり、その後、呼び出します入れたり削除送ることができると思いますそれに応じてAPIを休止します。

+0

なぜブールオプションに文字列を使用しますか? – ThiefMaster

1

TastyPieはこれを内部的にはX-Http-Method-Overrideヘッダーを使用してサポートしていますが、ヘッダーがアクセスできなくなったためにメソッドがオーバーライドされるようには聞こえません。あなたがこれを行うことができるオフチャンスについては、hereを参照してください。

あなたの最善の策は、次のようにDjangoのミドルウェアを使用することが考えられます:あなたのサイトでmiddleware.pyで

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? 

スタッシュこれは、あなたは、あなたのDjangoの設定で、このミドルウェアをロードする必要があります。マジック!

関連する問題