【问题标题】:Return or create a token if the user already exist? django如果用户已经存在,返回或创建一个令牌? django
【发布时间】:2018-02-12 00:11:19
【问题描述】:

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

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'

【问题讨论】:

  • Token 模型定义是什么样的?从字典中获取属性也不会像您实现它的方式那样工作。例如,可以通过 userdata['first_name'] 访问 first_name
  • 嗨,我想我解决了这个问题...我使用了 user = User.objects.get(username=serialized.data['email']) 而不是 user = User.objects.filter( username=serialized.data['email']) 但感谢您的帮助

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


【解决方案1】:

你的模特Token需要正确答案,但我认为你需要

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

您可以更简单地回答:

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

【讨论】:

    【解决方案2】:

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

    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)
    

    【讨论】:

    • User.objects.get(username=serialized.data['email']) 不是一个好主意。如果 User 对象不存在,这将引发异常并使您的代码崩溃
    • 是的,你是对的。我将尝试对此作出回应。谢谢@arjun27
    猜你喜欢
    • 2023-03-27
    • 2023-03-08
    • 2019-09-10
    • 2021-02-09
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    • 2014-10-08
    • 2021-09-08
    相关资源
    最近更新 更多