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

hak*_*aki 14 django cors django-rest-framework django-cors-headers

我正在使用本地计算机上的两台开发服务器(node&django).

我已经添加django-cors-headers到项目中以允许所有来源和方法(在dev上)具有以下设置:

CORS_ORIGIN_ALLOW_ALL = 'ALL'
CORS_ALLOW_METHODS = (
        'GET',
        'POST',
        'PUT',
        'PATCH',
        'DELETE',
        'OPTIONS'
    )
Run Code Online (Sandbox Code Playgroud)

尝试DELETE时我得到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
Run Code Online (Sandbox Code Playgroud)

请注意,DELETE&PATCH/ PUT不在允许的方法列表中.

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

Kev*_*own 30

响应看起来非常类似于 ViewSet 的列表视图(/api/resource/).列表视图仅支持GET,列出所有对象以及POST创建新对象.

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


N.C*_*.C. 5

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

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

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