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):
Когда вы устанавливаете новые классы разрешений через атрибут class, представление будет игнорировать список по умолчанию в файле settings.py
.
Вероятно, вам нужно составить список разрешений с помощью IsAuthenticated
.
А ошибка, которую вы получаете, связана с тем, что request.user
не возвращает экземпляр CustomUser
, возможно, вам нужно запросить пользовательского пользователя, если ваша система авторизации не вводит его экземпляр в ваш запрос.
Вы можете попробовать изменить разрешения на:
permission_classes = (IsAuthenticated, IsOwnerOrReadOnly,)
# or
permission_classes = (IsAuthenticated & IsOwnerOrReadOnly,)