2014-11-03 505 views
8

我正在使用本地計算機上的兩個dev服務器(節點& django's)。Django/DRF - 405 DELETE操作不允許的方法

我已經添加django-cors-headers到項目中,讓所有的起源&方法(上DEV)以下設置:

CORS_ORIGIN_ALLOW_ALL = 'ALL' 
CORS_ALLOW_METHODS = (
     'GET', 
     'POST', 
     'PUT', 
     'PATCH', 
     'DELETE', 
     'OPTIONS' 
    ) 

我得到405試圖刪除時。 綜觀響應頭

HTTP/1.0 405 METHOD NOT ALLOWED 
Date: Mon, 03 Nov 2014 10:04:43 GMT 
Server: WSGIServer/0.1 Python/2.7.5 
Vary: Cookie 
X-Frame-Options: SAMEORIGIN 
Content-Type: application/json 
Access-Control-Allow-Origin: * 
Allow: GET, POST, HEAD, OPTIONS 

注意DELETE & PATCH/PUT不存在於所允許的方法列表。

有沒有從我的配置中缺少的東西?

+0

您的視圖是否實現了這些方法?你在使用ModelViewSet嗎?混合,ApiView? – argaen 2014-11-03 11:35:05

+0

好老'viewsets.ModelViewSet' - 測試運行完美。 – haki 2014-11-03 11:59:27

+0

您的視圖允許使用哪些方法?由於文檔'CORS_ALLOW_METHODS'只定義了可以全局使用的方法,但不能將其添加到自動查看。還有一件事'CORS_ORIGIN_ALLOW_ALL'必須是布爾值,而不是字符串。 – coldmind 2014-11-03 12:06:46

回答

22

的反應看起來非常相似到了列表視圖/api/resource/)的視圖集的。列表視圖只支持GET,列出所有對象,並且POST創建一個新對象。

DELETE請求只允許在詳細視圖/api/resource/1/)。這是因爲Django REST Framework需要知道你想要刪除的對象,而這些信息不能從列表視圖中檢索。

+1

謝謝你 - 那就是它。我從url中刪除了pk,請求出現在列表中,而不是詳細信息。 – haki 2014-11-03 12:49:24

+0

如果使用DRF路由器模塊,則例如'user-detail'支持PUT操作,而不是'user-list'。 http://www.django-rest-framework.org/api-guide/routers/ – 2015-07-14 20:27:04