Django Rest Framework возвращает {'detail': 'Not found.'} при тестировании, хотя показывает Data в URL
У меня есть следующий проект django со следующим views.py:
@api_view(['GET'])
@permission_classes([AllowAny])
def getItem(request, **kwargs):
user = get_object_or_404(User, username=request.user)
items=Item.objects.filter(user=user)
serializer = ItemSerializer(items, many=True)
return Response(serializer.data)
Вот serializer.py
class ItemSerializer(serializers.ModelSerializer):
user = serializers.CharField(source="user.username", read_only=True)
class Meta:
model= Workout
fields = '__all__'
Вот результат в Django Rest Framework URL:
Get Workout
GET /api/Shiko/items/
HTTP 200 OK
Allow: GET, OPTIONS
Content-Type: application/json
Vary: Accept
[
{
"id": 1,
"user": "Shiko",
"active": false,
"name": "Item 1",
"slug": null
}
]
Тест с использованием Jupyter для проверки доступности данных:
import requests
data = requests.get(URL)
json_data = data.json()
print (json_data)
Мой вопрос:
Что может быть не так в моих настройках, что нужно изменить, чтобы возвращать достоверные данные в моем тестовом коде, зная, что данные в Json есть, но при тестировании они возвращаются не найденными.
Также я использовал IsAuthenticated
, который вернул {'detail': 'Authentication credentials were not provided.'}
, что означает, что тестовый код действителен.
Что я делаю неправильно и как мне исправить?
Я не понимаю вашей логики, потому что вы используете функцию get_object_or_404
, чтобы попытаться получить реального пользователя из request.user, но ваше представление использует AllowAny, поэтому в некоторых случаях это поле может быть None, и ваш ответ может быть 404.
Возможно, вам нужно получить аутентификацию некоторого пользователя в вашем Jupyter "Testing Code"?
Но я думаю, что это плохая идея - тестировать код с помощью Jupyter, потому что это не тестовый случай или что-то другое.
Вы можете попробовать использовать Pytest https://docs.pytest.org/en/7.2.x/, coverage https://coverage.readthedocs.io/en/6.5.0/ для тестирования вашего кода, это очень просто и прекрасно!