Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python /api/login'处的键错误;用户';_Python_Django_Api_Authentication_Key - Fatal编程技术网

Python /api/login'处的键错误;用户';

Python /api/login'处的键错误;用户';,python,django,api,authentication,key,Python,Django,Api,Authentication,Key,此用户关键字错误显示在我的登录api中。我不知道为什么。我猜用户实例在登录视图中不可用。我是新来的,我不知道原因 这是我的登录视图: class LoginUserView(GenericAPIView): permission_classes = [AllowAny] serializer_class = UserLoginSerializer def post(self, request, *args, **kwargs): data = request.data

此用户关键字错误显示在我的登录api中。我不知道为什么。我猜用户实例在登录视图中不可用。我是新来的,我不知道原因

这是我的登录视图:

class LoginUserView(GenericAPIView):
    permission_classes = [AllowAny]
    serializer_class = UserLoginSerializer

def post(self, request, *args, **kwargs):
    data = request.data
    serializer = UserLoginSerializer(data=data)
    serializer.is_valid(raise_exception=True)
    user = serializer.validated_data["user"]
    token, created = Token.objects.get_or_create(user=user)
    return response.Response({"token": token.key}, status=status.HTTP_200_OK)
这是我的序列化程序:

class UserLoginSerializer(serializers.ModelSerializer):
    email = serializers.EmailField(label='Email Address')

class Meta:
    model = User
    fields = [
'email', 'password',
]
    extra_kwargs = {"password":
{"write_only": True}}

def validate(self, data):
    # user = None
    email = data.get("email", None)
    password = data.get("password")
if not email:
    raise serializers.ValidationError("Email is required for login")
if not password:
    raise serializers.ValidationError("Password is required for login")
user = authenticate(email=email, password=password)
if not user:
    raise serializers.ValidationError("This email is not valid/already exists")
return data

序列化程序在其验证数据中没有用户。请注意,
serializer.validated_data['user']
没有多大意义,因为您从未将其传递给验证器

您应使用以下方法将其添加到数据中:

def validate(self, data):
    # user = None
    email = data.get('email', None)
    password = data.get('password')
    if not email:
        raise serializers.ValidationError('Email is required for login')
    if not password:
        raise serializers.ValidationError('Password is required for login')
    user = authenticate(email=email, password=password)
    if not user:
        raise serializers.ValidationError('This email is not valid/already exists')
    data['user'] = user
    return data
def验证(自身、数据):
#用户=无
email=data.get('email',无)
password=data.get('password')
如果不是电子邮件:
引发序列化程序。ValidationError('登录需要电子邮件')
如果不是密码:
引发序列化程序。ValidationError('登录需要密码')
用户=验证(电子邮件=电子邮件,密码=密码)
如果不是用户:
引发序列化程序。ValidationError('此电子邮件无效/已存在')
数据['user']=用户

返回数据
serialzier的验证数据中没有用户。请注意,
serializer.validated_data['user']
没有多大意义,因为您从未将其传递给验证器。