Raise_exception не работает при аутентификации на базе токенов

Я пытаюсь запустить свои тесты на кодах состояния, в то время как я не предоставляю токен в POST запросе

Итак, набор представлений выглядит следующим образом:

class TopicViewSet(viewsets.ModelViewSet):
    serializer_class = TopicSerializer
    permission_classes = (IsOwnerOrReadOnly, )
    pagination_class = TopicPagination

    def get_queryset(self):
        queryset = Topic.objects.all().select_related(
            'owner',
        )
        return queryset

Класс разрешения, который я использую:

class IsOwnerOrReadOnly(permissions.BasePermission):
    def has_object_permission(self, request, view, obj):
        if request.method in permissions.SAFE_METHODS:
            return True

        return obj.owner == request.user

Сам тест:

@pytest.mark.django_db
def test_topic_post_method_is_not_allowed_unauthenticated_user(api_client, topics_url):
    response = api_client.post(topics_url, data={'name': 'hello', 'slug': 'hello'})
    assert response.status_code == 401

Все, что мне нужно, это простой ответ типа:

{
    "detail": "Authentication credentials were not provided."
}

Но я получаю html страницу, сгенерированную django (скриншот из Postman): enter image description here

Когда вы устанавливаете новые классы разрешений через атрибут class, представление будет игнорировать список по умолчанию в файле settings.py.

Вероятно, вам нужно составить список разрешений с помощью IsAuthenticated. А ошибка, которую вы получаете, связана с тем, что request.user не возвращает экземпляр CustomUser, возможно, вам нужно запросить пользовательского пользователя, если ваша система авторизации не вводит его экземпляр в ваш запрос.

Вы можете попробовать изменить разрешения на:

permission_classes = (IsAuthenticated, IsOwnerOrReadOnly,)
# or
permission_classes = (IsAuthenticated & IsOwnerOrReadOnly,)
Вернуться на верх