2012-04-29 83 views
2

我正在使用Django Tastypie以獲得Rest API。它運作良好。現在Django窗體PUT和DELETE http方法

,我想用我的REST API的Django的形式。我知道,Web瀏覽器不能發送PUTDELETE HTTP方法(只GETPOST)。

例如,爲了解決ExpressJS(A NodeJS 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 2012-04-30 00:16:58

1

TastyPie支持此內部使用X-HTTP-方法-Override標頭,但是,它並沒有聽起來像頭是任何方法覆蓋更容易獲得。如果您不能這樣做,請參閱here

您最好的選擇可能是使用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設置加載這個中間件。魔法!

相關問題