Django REST framework: Получение 403 при попытке проверить создание нового сообщения
Я пытаюсь создать тест для создания нового сообщения, но получаю ошибку 403. Я читал вопросы в этой теме, но либо они не касались тестирования, либо предложенное решение не работает (я предоставлю информацию о том, что я пробовал до сих пор).
Вот мой код:
urls.py:
app_name = "blog_api"
urlpatterns = [
path("<str:pk>/", PostDetail.as_view(), name="detail_create"),
path("", PostList.as_view(), name="list_create"),
]
и мой permissions.py:
class PostUserWritePermission(permissions.BasePermission):
message = "Editing posts is restricted to the admin and author of the post only."
def has_object_permission(self, request, view, obj):
if request.method in permissions.SAFE_METHODS:
return True
return request.user.is_superuser or request.user == obj.author
А вот мой views.py:
class PostList(generics.ListCreateAPIView):
permission_classes = [permissions.IsAuthenticatedOrReadOnly]
queryset = Post.post_objects.all()
serializer_class = PostSerializer
class PostDetail(generics.RetrieveUpdateDestroyAPIView):
permission_classes = [PostUserWritePermission]
queryset = Post.post_objects.all()
serializer_class = PostSerializer
И, наконец, мой tests.py:
class PostTests(APITestCase):
def test_view_posts(self):
url = reverse("blog_api:list_create")
response = self.client.get(url, format="json")
self.assertEqual(response.status_code, status.HTTP_200_OK)
def test_create_post(self):
self.test_category = Category.objects.create(name="test category")
self.test_user = User.objects.create_user(
username="test_user",
password="test_password",
)
data = {
"title": "new",
"author": 1,
"excerpt": "new",
"content": "new",
"slug": "new",
}
url = reverse("blog_api:list_create")
response = self.client.post(url, data, format="json")
print(response.data)
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
Итак, когда я тестирую с помощью команды py manage.py test
, первый тест проходит нормально, но второй возвращает error 403
, и когда я попытался посмотреть ответное сообщение с помощью print(response.data)
, вот что выводится:
{'detail': ErrorDetail(string='Authentication credentials were not provided.', code='not_authenticated')}
Я также должен упомянуть, что у меня есть эта настройка в моем settings.py
файле:
REST_FRAMEWORK = {
"DEFAULT_PERMISSION_CLASSES": [
"rest_framework.permissions.IsAuthenticatedOrReadOnly",
],
}
Я немного поискал об этом, один вопрос был немного похож на мою проблему, но я создаю своего пользователя методом create_user
, поэтому его решение не имеет отношения к моему вопросу.
Что я здесь упускаю?
ЧТО Я ПРОБОВАЛ:
Я попытался закомментировать класс разрешения PostUserWritePermission
в представлении PostDetail
, но все равно получил ту же ошибку.
Также я попытался решить эту проблему, добавив TokenAuthentication
в настройки, но и это не помогло.