'AuthToken'类型的对象不可JSON序列化

kzr*_*sal 5 django django-authentication python-3.x django-rest-framework

创建令牌时出现上述错误,代码如下:

from rest_framework import generics, permissions
from rest_framework.response import Response 
from knox.models import AuthToken
from .serializers import UserSerializer, RegisterSerializer

class RegisterAPI(generics.GenericAPIView):
    serializer_class = RegisterSerializer

def post(self, request, *args, **kwargs):
    serializer = self.get_serializer(data=request.data)
    serializer.is_valid(raise_exception=True)
    user = serializer.save()
    return Response({
        "user": UserSerializer(user, context=self.get_serializer_context()).data,
        "token": AuthToken.objects.create(user)
    })
Run Code Online (Sandbox Code Playgroud)

我在这里做错了什么

Ras*_*oda 15

Token.objects.create返回一个元组(实例,令牌)。因此,为了获得令牌,请使用索引1

"token": AuthToken.objects.create(user)[1]

  • 但这是我们需要使用的真正令牌吗?我的意思是,当我们打印 AuthToken.objects.create(user) 时,它会给出这样的输出;(<AuthToken: long_token : username>, 'another_token') 当我检查数据库时,“long_token”存储在数据库中,而不是“another_token”,但您使用的方法返回“another_token”。 (2认同)

Rad*_*esh 6

更好的方法是在python中使用此方法

_, token = AuthToken.objects.create(user)
return Response({
    "user": UserSerializer(user, context=self.get_serializer_context()).data,
    "token": token
})
Run Code Online (Sandbox Code Playgroud)