DRF框架序列化器全局校验获取不到参数?

DRF框架序列化器全局校验获取不到参数?

view层代码如下:

class LoginView(APIView):

"""

用户登陆

"""

def post(self, request):

try:

# 获取手机号码

mobile = request.data.get('mobile')

# 查询用户是否存在

user = UserProfile.objects.get(username=mobile)

# 用户不存在

except UserProfile.DoesNotExist:

serializer_obj = LoginSerializer(data=request.data)

# 校验数据

if serializer_obj.is_valid():

# 保存数据

user = serializer_obj.save()

return Response({'token': get_tokens(user)})

return Response({'detail': '登陆失败'}, status=404)

else:

# 判断用户是否被封禁

if not user.is_active:

Response({'detail': '该用户已被封禁'}, status=404)

return Response({'token': get_tokens(user)})

serializer代码

class LoginSerializer(serializers.Serializer):

"""

登陆与注册

"""

id = serializers.IntegerField(read_only=True)

username = serializers.CharField(read_only=True)

avatar = serializers.CharField(max_length=255, read_only=True)

user_type = serializers.IntegerField(read_only=True)

score = serializers.IntegerField(read_only=True)

# 登陆类型

login_type = serializers.IntegerField(min_value=1, max_value=1, required=True)

# 请求code

code = serializers.CharField(write_only=True, max_length=255, required=True)

# 手机号码

mobile = serializers.CharField(max_length=11, min_length=11, required=True)

# 全局校验

def validate(self, attrs):

print(attrs['code'])

print('校验数据', attrs)

return attrs

全局校验达不到attr的值,程序也不报错


回答:

您的问题描述中,提到您在全局校验时无法访问 attrs 的值,但程序没有报错。根据您提供的代码,我发现在 LoginView 类的 post 方法中,当用户不存在时,您创建了 LoginSerializer 对象并进行了校验。但在这之前,您没有获取并处理请求中的 codelogin_type 数据。

要解决这个问题,请确保您从请求数据中获取所需的参数,然后将其传递给 LoginSerializer,以便在全局校验中使用。以下是您可以尝试的方法:

LoginViewpost 方法中,首先获取 codelogin_type 参数:

code = request.data.get('code')

login_type = request.data.get('login_type')

然后,在创建 LoginSerializer 对象时,将这些参数传递给它:

serializer_obj = LoginSerializer(data={

'code': code,

'login_type': login_type,

'mobile': mobile

})

这样,在进行全局校验时,您应该能够访问 attrs 中的这些值。如果仍然出现问题,请检查您的请求数据是否包含所需的参数,以及您的代码中是否存在其他潜在问题。

以上是 DRF框架序列化器全局校验获取不到参数? 的全部内容, 来源链接: utcz.com/p/938872.html

回到顶部