Django-rest-framework实现序列化进行前端数据到后端数据校验

实现序列化,需要继承serializers.Serializer序列化器的方法。

from rest_framework import serializers
    class MsgCodeSerializer(serializers.Serializer):
        imagecode_id=serializers.UUIDField()
        image_string=serializers.CharField(max_length=4,min_length=4)
        def validate(self, data):
        print('传递过来的数据',data)
        imagecode_id=data['imagecode_id']
        image_string=data['image_string']
        print(type(imagecode_id))
        con=get_redis_connection()
        true_string=con.get(str(imagecode_id))
        print('验证图片的真正字符串',true_string)
        if not true_string:
            raise serializers.ValidationError('raise取出验证码文字错误')
        print('数据库去处的字符格式',type(true_string))
        print('这是传递过来的图片文字',type(image_string))
        if image_string != true_string.decode():
            raise serializers.ValidationError('验证未通过')
        else:
            print('验证通过')

        return data

调用自定义化序列化器类;就行数据校验:

class MsgCodeView(APIView):

    def get(self,request,phone):
        print(request.GET)
        print(request.query_params)
        # serializer = MsgCodeSerializer()

        # 检验参数
        ser = MsgCodeSerializer(data=request.query_params)
        ser.is_valid(raise_exception=True) #返回TRUE,表示校验成功,否则没有校验成功,

结果成功:

<QueryDict: {'imagecode_id': ['db7c5517-ccae-487f-9fb3-a2043fbd5cd0'], 'image_string': ['C3A4']}>
<QueryDict: {'imagecode_id': ['db7c5517-ccae-487f-9fb3-a2043fbd5cd0'], 'image_string': ['C3A4']}>
传递过来的数据 OrderedDict([('imagecode_id', UUID('db7c5517-ccae-487f-9fb3-a2043fbd5cd0')), ('image_string', 'C3A4')])
<class 'uuid.UUID'>
验证图片的真正字符串 b'C3A4'
数据库去处的字符格式 <class 'bytes'>
这是传递过来的图片文字 <class 'str'>
验证通过
True
423559
ok

其中自定义序列化类中有方法validate(),在实例化类的时候调用该方法,不需要用validate(),仅仅实例对象.is_valide()返回真与假值即可。

猜你喜欢

转载自blog.csdn.net/qq_36455530/article/details/85250598
今日推荐