如果用户已存在,则返回或创建令牌? Django的

时间:2017-09-03 16:22:44

标签: python django django-rest-framework access-token

如果用户已经存在,是否可以返回或创建令牌? 我需要这样的东西

class LoginEasy(CreateAPIView):
    queryset = User.objects.all()
    serializer_class = UserSerializer

    def post(self, request):
        pw = '!Rd5tkis-02kjWk'
        serialized = UserSerializer(data=request.data)
        if serialized.is_valid():
            u = User.objects.filter(email=serialized.data['email'])
            if len(u) > 0:
                userdata= {'id': u[0].id, 'password': pw,  'first_name': u[0].first_name, 'last_name': u[0].last_name, 'email': u[0].email},
                token, created = Token.objects.get_or_create(user=userdata)
                return Response({'token': token.key,
                                 'id': userdata.id,
                                 'first_name': userdata.first_name,
                                 'last_name': userdata.last_name,
                                 'email': userdata.email})

我收到此错误。

int()参数必须是字符串,类似字节的对象或数字,而不是' dict'

2 个答案:

答案 0 :(得分:0)

您的模型Token需要正确答案,但我认为您需要

Token.objects.get_or_create(**userdata)
#                          ^^^^^^^^^^^

你可以更简单地做出回应:

userdata.update({'token': token.key})
return Response(userdata)

答案 1 :(得分:0)

我发现错误,如果这可以帮助这里的人是固定代码。

def post(self, request):
    serialized = UserSerializer(data=request.data)
    if serialized.is_valid():
        u = User.objects.filter(email=serialized.data['email'])
        user = User.objects.get(username=serialized.data['email'])
        if len(u) > 0:
            token, created = Token.objects.get_or_create(user=user)
            return Response({'token': token.key}, status=status.HTTP_200_OK)