You need to enable JavaScript to run this app. Django登录返回Token报Object of type Token is not JSON serializable错误如何解决
优惠活动
大模型
产品
解决方案
定价
更多

Django登录返回Token报Object of type Token is not JSON serializable错误如何解决

问题修复方案

错误原因

报错Object of type Token is not JSON serializable的核心原因是:你直接将Django ORM的Token模型实例传入了Response对象,DRF默认没有配置对ORM模型实例的序列化规则,无法直接将其转换为JSON格式返回。

修复方法

最直接的修复方案是取出Token实例中存储实际令牌值的key字段,按业务需要构造JSON结构返回即可。

代码修改点

将原代码中:

return Response(token)

替换为:

return Response({"token": token.key})

可选优化建议

  • 增加Token不存在的异常处理,避免极端情况(如用户Token被手动删除)触发500错误,也可以直接用get_or_create兜底:
    token, created = Token.objects.get_or_create(user=user)
    
  • 身份校验失败/用户禁用时返回HTTP_401_UNAUTHORIZED状态码比404更符合HTTP语义。

完整修复后代码

class AuthAPIView(APIView):
    def post(self, request, format=None):
        data = request.data

        username = data.get('username', None)
        password = data.get('password', None)

        user = authenticate(username=username, password=password)

        if user is not None:
            if user.is_active:
                login(request, user)
                token = Token.objects.get(user=user)
                # 仅修改返回行,取token的key字段返回
                return Response({"token": token.key})
            else:
                return Response(status=status.HTTP_401_UNAUTHORIZED)
        else:
            return Response(status=status.HTTP_401_UNAUTHORIZED)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 15:30:00