Сообщение о методе 405 запрещено - PullRequest
0 голосов
/ 04 августа 2020

Я написал следующий код:

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 ]

1 голос
/ 04 августа 2020

ReadOnlyModelViewSet предоставляет только действия «только для чтения», поэтому вы получаете сообщение об ошибке POST not allowed. Подробнее об этом можно прочитать Здесь

1 голос
/ 04 августа 2020

Как видно из названия, ReadOnlyModelViewSet поддерживает только метод HTTP GET .

In для поддержки других методов вам необходимо использовать ModelViewSet класс (или другие подходящие классы)

Например:

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

Боковое примечание: метод change_password(...) действительно выглядит как настраиваемое действие , но вам не хватает @action декоратор.

...