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

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

序列化与反序列化

  • 序列化: 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']

posted @ 2020-01-03 19:09  大道至诚  阅读(261)  评论(0)    收藏  举报