Python /api/login'处的键错误;用户';
此用户关键字错误显示在我的登录api中。我不知道为什么。我猜用户实例在登录视图中不可用。我是新来的,我不知道原因 这是我的登录视图: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
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']
没有多大意义,因为您从未将其传递给验证器。