第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

屬性錯(cuò)誤:“元組”對(duì)象沒有屬性“值”

屬性錯(cuò)誤:“元組”對(duì)象沒有屬性“值”

qq_花開花謝_0 2023-10-11 16:02:56
我有一個(gè)基本的 API 來重置密碼,但是,盡管有“值”,但它似乎拋出了此錯(cuò)誤,并沒有完全出現(xiàn)在我的代碼中: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"),可能的錯(cuò)誤是什么?我該如何解決它?
查看完整描述

3 回答

?
慕哥9229398

TA貢獻(xiàn)1877條經(jīng)驗(yàn) 獲得超6個(gè)贊

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

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


查看完整回答
反對(duì) 回復(fù) 2023-10-11
?
富國(guó)滬深

TA貢獻(xiàn)1790條經(jīng)驗(yàn) 獲得超9個(gè)贊

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


嘗試這個(gè):


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)


查看完整回答
反對(duì) 回復(fù) 2023-10-11
?
蕪湖不蕪

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超7個(gè)贊

應(yīng)該fields在Meta類內(nèi)


class SetNewPasswordSerializer(serializers.Serializer):

    # rest of your code

    class Meta:

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


查看完整回答
反對(duì) 回復(fù) 2023-10-11
  • 3 回答
  • 0 關(guān)注
  • 188 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)