【问题标题】:django rest JSONWebTokenAPIView serializer-class object has no attribute 'object'django rest JSONWebTokenAPIView 序列化程序类对象没有属性“对象”
【发布时间】:2019-07-05 19:19:57
【问题描述】:

我正在将 JSONWebTokenAPIView 从 rest_framework_jwt 扩展到我的自定义视图:

class UserLogin(JSONWebTokenAPIView):

     serializer_class = serializers.AdabaziUserLoginJWT

这是我的自定义序列化程序类:

class AdabaziUserLoginJWT(serializers.Serializer):
    username = serializers.CharField()
    password = serializers.CharField(style = {'input-type':'password'})
    status = serializers.SerializerMethodField(method_name='show_status')
    #token = serializers.CharField(read_only=True)

    class Meta():
        model = Adabazi_user
        fields = ('status')

    def show_status(self,obj):
        return obj.status

    def validate(self,attrs):

        credentials={
        'username' : attrs.get('username'),
        'password' : attrs.get('password')
        }

        user = authenticate(**credentials)
        if user :
            if user.is_active:
                ada_user = Adabazi_user.objects.get(user=user)
                if ada_user.status ==1:
                    ada_user.status = 2 #user is logged in right now
                    ada_user.updated_at = timezone.now()
                    user.last_login = timezone.now()
                    payload = jwt_payload_handler(user)
                    token = jwt_encode_handler(payload)
                    return {
                            'token':token,
                            'user':user,
                            'adabazi_user' : ada_user}
                else:
                    raise serializers.ValidationError('User is already logged in.')
            else:
                raise serializers.ValidationError('Account is deactivated.')
        else:
            raise serializers.ValidationError('User credentials failed.')

    def create(self,validated_data):
        user = validated_data['user']
        adabazi_user = validated_data['adabazi_user']
        user.save()
        ada_user.save()
        return ada_user

但是当我想 POST usernamepasswordlocalhost/api/user/login/ 时,这个网址连接到我的视图;发生此错误:

在这行代码中post JSONWebTokenAPIView 方法报错 user = serializer.object.get('user') or request.user

Exception Value: 'AdabaziUserLoginJWT' object has no attribute 'object'


如何访问序列化程序实例对象属性? 序列化器是否有任何对象属性?

【问题讨论】:

  • 我认为你的 AdabaziUserLoginJWT 应该扩展 ModelSerializer

标签: django serialization django-rest-framework jwt


【解决方案1】:

我最近遇到了同样的错误,似乎问题在于 rest_framework_jwt 库和 rest_framework 本身的集成:rest_framework_jwt em> 似乎没有用最新版本的 rest_framework 更新,而 rest_framework 的序列化程序中的代码发生了变化(参见here)。

在新版本的rest_framework中没有serializer.object.get这样的语法,因为:

之前的序列化器使用两步创建对象,如下:

验证数据将创建一个对象实例。此实例将 > 可用作 serializer.object。 然后调用 serializer.save() 会将对象实例保存到数据库中。

我们现在使用单步对象创建,如下所示:

验证数据使清理后的数据可用作 serializer.validated_data。 调用 serializer.save() 然后保存并返回新的对象实例。

因此,为了使用这个类,您必须使用 rest_framework 的新 API 对其进行更新。

【讨论】:

    猜你喜欢
    • 2015-07-10
    • 2015-03-12
    • 1970-01-01
    • 2020-06-20
    • 2013-02-02
    • 2011-12-27
    • 1970-01-01
    • 2020-12-20
    • 2010-10-22
    相关资源
    最近更新 更多