我有一个资源,我只想允许客户端对资源进行发布请求,这就是为什么我使用
class MyViewSet(mixins.CreateModelMixin, viewsets.GenericViewSet):
在我的视野中。
当我发出发布请求时,它可以正常工作。
当我发出列表请求时,它会按预期抛出405响应。
当我执行检索,放置,修补或删除方法时,它会抛出404而不是405 ...为什么?
尽管发布了请求,我如何使每个请求都返回405?
谢谢问候!
答案 0 :(得分:0)
如果只想支持一个动作,似乎没有任何理由使用ViewSet。相反,请使用指向特定网址的CreateApiView。
答案 1 :(得分:0)
使用 5 7
属性
http_method_names
答案 2 :(得分:0)
如果viewset没有任何详细信息方法,则drf SimpleRouter将不会为/api/basename/{id}/
因此Django的url调度程序将根本不匹配这些url,并返回404。
我认为对于每种方法都返回405是没有道理的。该状态表示至少有一种方法对于特定的URL应该有效。
您可以添加一个虚拟详细信息方法,但只需将所有请求移交给APIView 405处理程序即可。
我认为这应该强制路由器为视图集注册详细网址,并为所有内容返回405(可能是OPTIONS例外)。
class MyViewSet(mixins.CreateModelMixin, viewsets.GenericViewSet):
def retrieve(self, request, *args, **kwargs):
return self.http_method_not_allowed(request, *args, **kwargs)