Django / DRF - 405 DELETE操作不允许使用方法

时间:2014-11-03 10:12:55

标签: django cors django-rest-framework django-cors-headers

我在本地计算机上使用两台开发服务器(node& django' s)。

我已将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

我的配置中是否缺少某些内容?

2 个答案:

答案 0 :(得分:30)

对于ViewSet,响应与列表视图/api/resource/)的响应非常相似。列表视图仅支持GET,列出所有对象,POST支持创建新对象。

DELETE次请求仅允许在详细信息视图/api/resource/1/)上。这是因为Django REST Framework需要知道您要删除的对象,并且无法仅从列表视图中检索此信息。

答案 1 :(得分:2)

如果您需要在DRF中将http方法DELETE与没有pk的URL连接起来,请在ModelViewSet内部进行尝试:

@action(methods=['delete'], detail=False)
def delete(self, request):
    # your code

UPD :请注意,action类内的ModelViewSet属性将是None的应有请求。如果在某处进行检查,则不仅要处理动作名称,还要处理请求方法和请求路径。