我在本地计算机上使用两台开发服务器(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
。
我的配置中是否缺少某些内容?
答案 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
的应有请求。如果在某处进行检查,则不仅要处理动作名称,还要处理请求方法和请求路径。