框架之反序列化请求数据的校验

框架之反序列化请求数据的校验

序列化与反序列化

  • 序列化: GET
  • 反序列化:PUT、PATCH、POST

    反序列化的数据校验

    数据校验方式有三种:
  • 直接在字段中添加属性的方式来进行校验

      class UserInfoSerializer2(serializers.Serializer):
          username = serializers.CharField(max_length=10, error_messages ={'required': '标题不能为空', 'max_length': "用户名不能超过10位"})                                                                  
          password = serializers.CharField(max_length=15, error_messages = {'required': '密码不能为空', 'max_length': '密码不能超过15位'})
  • 在接收到request穿过来的数据后,在序列化类中创建校验的类方法来进行校验

      class UserInfoSerializer2(serializers.Serializer):
          username = serializers.CharField(max_length=10, error_messages ={'required': '标题不能为空', 'max_length': "用户名不能超过10位"})                                                                  
          password = serializers.CharField(max_length=15, error_messages = {'required': '密码不能为空', 'max_length': '密码不能超过15位'})
    
          def validate(self, data_dict):
              username = data_dict.get('username')
              # data_dict不能加self
              password = data_dict.get('password')
              if username == '李志':
                  raise serializers.ValidationError("用户名已注册")
              if password == 'bl130310':
                  raise serializers.ValidationError("密码重复")
              return data_dict

    Note
    data_dict是在实例化序列化类是接收到的数据,当通过类方法校验完成的数据,必须把数据返回。

  • 在序列化类外创建校验函数来进行校验,函数通过在字段中添加validators=[校验函数1, 校验函数2]的方式接收,并且只写函数名,不加括号和参数

      def checkusername(username):
      # 这里需要写校验的字段名
          message = "用户名重复"
          if username == '李志':
              raise serializers.ValidationError(message)        
    
      class UserInfoSerializer2(serializers.Serializer):
          username = serializers.CharField(max_length=10, error_messages ={'required': '标题不能为空', 'max_length': "用户名不能超过10位"}, validators=[checkusername])                                                                  
          password = serializers.CharField(max_length=15, error_messages = {'required': '密码不能为空', 'max_length': '密码不能超过15位'})
    
          def validate(self, data_dict):
              username = data_dict.get('username')
              password = data_dict.get('password')
              if username == '李志':
                  raise serializers.ValidationError("用户名已注册")
              if password == 'bl130310':
                  raise serializers.ValidationError("密码重复")
              return data_dict
    
          class Meta:
              model = UserInfo
              fields = ['username', 'password']

猜你喜欢

转载自www.cnblogs.com/ddzc/p/12146434.html
今日推荐