You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DRF接口网页显示数据但Jupyter测试返回Not found的问题排查

问题分析与修复方案

核心问题1:未登录请求下的用户查询逻辑错误

当权限设为AllowAny时,Jupyter发起的requests.get是未登录状态,此时request.user是AnonymousUser对象。你用get_object_or_404(User, username=request.user)查询用户,会尝试匹配username='AnonymousUser'的用户,而数据库中不存在该用户,因此直接返回404(Not found)。网页端能正常访问,是因为你在网页端已登录,request.user是真实存在的用户对象。

核心问题2:序列化器模型不匹配(潜在错误)

ItemSerializer的元类中指定model=Workout,但实际序列化的是Item对象,这会导致序列化逻辑冲突,网页端可能因场景巧合暂时未暴露问题,但长期会引发报错。


修复步骤

1. 调整视图的用户查询逻辑

根据业务需求二选一:

  • 需求:仅登录用户可查看自己的Item
    权限保持IsAuthenticated,简化用户查询逻辑(登录后request.user即为当前用户对象):

    @api_view(['GET'])
    @permission_classes([IsAuthenticated])
    def getItem(request, **kwargs):
        items = Item.objects.filter(user=request.user)
        serializer = ItemSerializer(items, many=True)
        return Response(serializer.data)
    

    Jupyter测试时需携带认证凭证(以Session认证为例):

    import requests
    
    # 先登录获取会话
    session = requests.Session()
    session.post("http://你的域名/api/login/", data={"username": "你的用户名", "password": "你的密码"})
    
    # 用会话请求目标接口
    data = session.get(URL)
    json_data = data.json()
    print(json_data)
    
  • 需求:允许未登录用户查看指定用户的Item
    先修改URL配置,添加用户名参数:
    path('api/<str:username>/items/', views.getItem),
    再修改视图逻辑,通过URL参数获取用户名:

    @api_view(['GET'])
    @permission_classes([AllowAny])
    def getItem(request, username, **kwargs):
        user = get_object_or_404(User, username=username)
        items = Item.objects.filter(user=user)
        serializer = ItemSerializer(items, many=True)
        return Response(serializer.data)
    

    Jupyter测试时URL需带上目标用户名,比如URL = "http://你的域名/api/Shiko/items/"

2. 修正序列化器的模型匹配

将ItemSerializer元类中的model改为Item:

class ItemSerializer(serializers.ModelSerializer):
    user = serializers.CharField(source="user.username", read_only=True)

    class Meta:
        model = Item
        fields = '__all__'

内容的提问来源于stack exchange,提问作者A_K

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 00:50:41