【问题标题】:Django Rest Framework returns {'detail': 'Not found.'} when tested although it is showing Data in URLDjango Rest Framework 在测试时返回 {\'detail\': \'Not found.\'} 尽管它在 URL 中显示数据
【发布时间】:2022-11-01 10:58:18
【问题描述】:

我有以下带有以下views.py的django项目:

@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.'},这意味着测试代码是有效的。

我做错了什么,我应该如何解决?

【问题讨论】:

    标签: python-3.x django django-rest-framework django-views django-serializer


    【解决方案1】:

    我不明白你的逻辑,因为你正在使用get_object_or_404 函数来尝试从 request.user 获取实际用户,但是你的视图使用 AllowAny,所以在某些情况下这个字段可能是 None,你的响应可能是 404。

    也许您需要在 Jupyter“测试代码”中对某些用户进行身份验证?

    但我认为用 Jupyter 测试代码是个坏主意,因为那不是测试用例或其他东西。

    您可以尝试使用 Pytest https://docs.pytest.org/en/7.2.x/, coverage https://coverage.readthedocs.io/en/6.5.0/ 来测试您的代码,非常简单和漂亮!

    【讨论】:

      猜你喜欢
      • 2017-07-01
      • 1970-01-01
      • 2016-12-10
      • 1970-01-01
      • 2023-02-15
      • 2018-12-20
      • 2017-08-30
      • 1970-01-01
      • 2015-12-15
      相关资源
      最近更新 更多