首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >django rest JSONWebTokenAPIView序列化程序-类对象没有属性' object‘

django rest JSONWebTokenAPIView序列化程序-类对象没有属性' object‘
EN

Stack Overflow用户
提问于 2019-02-11 23:45:08
回答 1查看 852关注 0票数 3

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

代码语言:javascript
运行
AI代码解释
复制
class UserLogin(JSONWebTokenAPIView):

     serializer_class = serializers.AdabaziUserLoginJWT

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

代码语言:javascript
运行
AI代码解释
复制
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

但是,当我想要将这个url连接到我的视图的POST usernamepasswordlocalhost/api/user/login/时,出现了以下错误:

在这一行代码中,post方法使JSONWebTokenAPIView产生错误user = serializer.object.get('user') or request.user

代码语言:javascript
运行
AI代码解释
复制
Exception Value: 'AdabaziUserLoginJWT' object has no attribute 'object'

如何访问序列化程序实例对象属性?序列化程序有对象属性吗?

EN

回答 1

Stack Overflow用户

发布于 2019-09-10 04:42:33

最近我遇到了同样的错误,问题似乎是rest_framework_jwt库和rest_framework本身的集成: rest_framework_jwt似乎没有用最新版本的rest_framework进行更新,而rest_ while的序列化程序中的代码却发生了变化(参见这里)。

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

在此之前,序列化器使用了两步创建对象,如下所示: 验证数据将创建一个对象实例。这个实例将以serializer.object的形式>可用。然后调用serializer.save()将对象实例保存到数据库中。 我们现在使用单步创建对象,如下所示: 验证数据使清理后的数据以serializer.validated_data的形式可用。然后调用serializer.save()保存并返回新的对象实例。

因此,为了使用这个类,您必须使用rest_framework的新API更新它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54645096

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档