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
相关产品推荐
相关产品推荐

