亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

屬性錯誤:“元組”對象沒有屬性“值”

屬性錯誤:“元組”對象沒有屬性“值”

qq_花開花謝_0 2023-10-11 16:02:56
我有一個基本的 API 來重置密碼,但是,盡管有“值”,但它似乎拋出了此錯誤,并沒有完全出現在我的代碼中:views.pyclass PasswordResetNewPasswordAPIView(GenericAPIView):    serializer_class = SetNewPasswordSerializer    def patch(self, request):        user = request.data        serializer = SetNewPasswordSerializer(data=user)        serializer.is_valid(raise_exception=True)        return Response({            "message": "password reset"},            status=status.HTTP_200_OK        )serializers.pyclass SetNewPasswordSerializer(serializers.Serializer):    password = serializers.CharField(max_length=50, write_only =True)    token = serializers.CharField(write_only =True)    uidb64 = serializers.CharField(max_length = 255, write_only =True)    fields = ("password", "token", "uidb64",)    def validate(self, attrs):        try:            password = attrs.get("password", "")            token = attrs.get("token", "")            uidb64 = attrs.get("uidb64", "")            print(uidb64)            id = force_str(urlsafe_base64_decode(uidb64))            print(id)            user = Author.objects.get(id=id)            if not PasswordResetTokenGenerator().check_token(user, token):                raise AuthenticationFailed("Invalid Reset Parameter", 401)            user.set_password(password)            user.save()            return user        except Exception:            raise AuthenticationFailed("Invalid Reset Parameter", 401)        return super().validate(attrs)urls.py...path('password-reset-setup/', PasswordResetNewPasswordAPIView.as_view(),name="password-reset-setup"),可能的錯誤是什么?我該如何解決它?
查看完整描述

3 回答

?
慕哥9229398

TA貢獻1877條經驗 獲得超6個贊

我不完全確定,但似乎在serializers.py 文件中,您正在創建一個從該類繼承的類serializers.Serializer。您的代碼顯示fields = ("password", "token", "uidb64",),這似乎與父serializers.Serializer類中的字段發生沖突。因此,一種解決方法是將該field變量重命名為類似my_field.

如果您打算覆蓋該變量,那么它應該是一個列表,而不是一個元組。將其從 更改fields = ("password", "token", "uidb64",)fields = ["password", "token", "uidb64"]


查看完整回答
反對 回復 2023-10-11
?
富國滬深

TA貢獻1790條經驗 獲得超9個贊

您的序列化器需要Meta聲明模型字段。


嘗試這個:


class SetNewPasswordSerializer(serializers.Serializer):

    password = serializers.CharField(max_length=50, write_only =True)

    token = serializers.CharField(write_only =True)

    uidb64 = serializers.CharField(max_length = 255, write_only =True)



    class Meta: # you missed meta to declare your model fields


        fields = ("password", "token", "uidb64",)


    def validate(self, attrs):

        try:

            password = attrs.get("password", "")

            token = attrs.get("token", "")

            uidb64 = attrs.get("uidb64", "")

            print(uidb64)

            id = force_str(urlsafe_base64_decode(uidb64))

            print(id)

            user = Author.objects.get(id=id)

            if not PasswordResetTokenGenerator().check_token(user, token):

                raise AuthenticationFailed("Invalid Reset Parameter", 401)

            user.set_password(password)

            user.save()

            return user

        except Exception:

            raise AuthenticationFailed("Invalid Reset Parameter", 401)

        return super().validate(attrs)


查看完整回答
反對 回復 2023-10-11
?
蕪湖不蕪

TA貢獻1796條經驗 獲得超7個贊

應該fields在Meta類內


class SetNewPasswordSerializer(serializers.Serializer):

    # rest of your code

    class Meta:

        fields = ("password", "token", "uidb64",)


查看完整回答
反對 回復 2023-10-11
  • 3 回答
  • 0 關注
  • 189 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號