405方法发布不允许

时间:2020-08-04 14:38:27

标签: python django django-rest-framework

我编写了以下代码:

class UserViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = User.objects.all()
    serializer_class = UserSerializer
    permission_classes = [IsCreation|permissions.IsAuthenticated]

    def change_password(self, request):
        print(request.user)

urls.py中具有相应的路线:

path('api/users/password', views.UserViewSet.as_view({'post': 'change_password'}))

但是当我向'api/users/password/'发出请求时,出现此错误:

{
    "detail": "Method \"POST\" not allowed."
}

我在做什么错了?

2 个答案:

答案 0 :(得分:1)

顾名思义,ReadOnlyModelViewSet仅支持 HTTP GET 方法。

为了支持其他方法,您需要使用ModelViewSet类(或其他合适的类)

例如:

class UserViewSet(viewsets.ModelViewSet): # change the super class
    queryset = User.objects.all()
    serializer_class = UserSerializer
    permission_classes = [IsCreation | permissions.IsAuthenticated]

旁注::方法change_password(...)看起来像是 自定义操作 ,但您缺少@action装饰器。

答案 1 :(得分:1)

ReadOnlyModelViewSet仅提供“只读”操作,这就是为什么出现错误POST not allowed的原因。您可以详细了解Here