401 повышен до 405 в Django Rest Framework - PullRequest
0 голосов
/ 05 марта 2019

У меня есть этот простой набор представлений, который позволяет создавать, извлекать и перечислять модель:

class GenreViewset(CreateListRetrieveViewset):
    """
    Creates, lists and retrieves genres.
    """

    serializer_class = GenreSerializer
    queryset = Genre.objects.all()
    permission_classes = (IsAuthenticatedOrReadOnly,)
    lookup_field = 'slug'

Когда я проверяю соответствующую конечную точку для запроса PUT, я ожидаю получить статус 405.Однако это не тот случай, когда пользователь не аутентифицирован, сначала возникает ошибка 401.Только когда пользователь аутентифицирован, возникает ошибка 405.

Почему это так, и возможно ли заставить 405 появляться до 401?Спасибо!

1 Ответ

0 голосов
/ 05 марта 2019

API отвечает с ошибкой 405, чтобы указать, что клиент пытался использовать метод HTTP, который ресурс не разрешает.

Ответ об ошибке 401 указывает, что клиент пытался работать на защищенном ресурсе безпредоставление надлежащего разрешения.401 повышается, так как клиент не разрешен в защищенном пространстве.

Я не знаю, действительно ли вы хотите исключить PUT из разрешенных методов, но это не имеет значения.Когда дело доходит до 405 до 401, я не думаю, что это когда-либо произойдет, поскольку пользователю разрешен метод HTTP на конечной точке, только если он авторизован для этого.Итак, Аутентификация пользователя всегда идет раньше, чем метод не разрешен. Логически вы можете догадаться, почему.Допустим, у вас нет билета на поездку туда, куда вы хотите отправиться, это проблема, да, но если у вас нет паспорта, прежняя проблема не имеет значения.

...