python Django Rest_Framework框架 反序列化时数据校验的三种方法(图文并茂版)

Posted 温柔且上进c

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python Django Rest_Framework框架 反序列化时数据校验的三种方法(图文并茂版)相关的知识,希望对你有一定的参考价值。

反序列化时数据校验的三种方法

注意:

  • 下述三个数据校验的方法,都会在视图函数中的is_valid()方法被调用时自动调用,不需要我们手动调用

单个字段的验证

  • 当我们需要对传入的数据中的某个字段进行单独的校验,则可以使用这种方法
  • 单个字段验证的方法命名规则:validate_<字段名> 例如:validate_name
  • def validate_name(self, data):data为此字段传入的数据,不需要手动传入,会自动将此字段的数据传入
  • 在此方法体中,书写对此字段验证的逻辑代码
  • 举例如下:对name字段进行校验,不能使用Python或Java作为名称:,逻辑如下
def validate_name(self, data):
    if data in ['Python', 'Java']:
        
        # 验证失败后,可以通过抛出异常来告知 is_valid方法,is_valid方法会将异常抛出
        raise serializers.ValidationError(detail='名字不能为Python或Java', code='validate_name')
    
    # 数据校验通过后,必须返回数据,否则在最终验证通过的数据中,不会包含此字段的数据
    return data
  • 注意:
    1. 数据校验失败后,可以通过serializers.ValidationError将异常抛出,is_valid()方法会将此异常抛出给后端,detail属性:异常的错误类型、code属性:异常抛出的方法名
    2. 数据校验通过后必须返回,否则在最终校验通过的数据中,不会包含此字段的数据

多个字段的验证

  • 当我们需要对传入的数据的多个字段进行验证时,则可以使用这种方法:
  • 多个字段验证的方法命名规则:validate
  • def validate(self, attrs): attrs为序列化器实例化时,传递的data数据自定义的序列化器(data=data) ,包含所有字段的数据,为一个字典数据类型
  • 举例如下:对name字段与age字段同时进行验证,name为wy的同学年龄不能为18,否则校验不通过,逻辑如下
def validate(self, attrs):
    if attrs['name'] == 'wy' and attrs['age'] == 18:
        raise serializers.ValidationError(detail='名字为wy的同学的年龄不能为18岁', code='validate')
    return attrs
  • 与上述方法一样:校验不通过时,可以抛出异常,校验通过时,需要将数据返回即可!!

外部函数进行校验

  • 当某个字段在多个序列化器中都是使用了同样的校验规则进行校验,则可以将此校验规则定义在外部函数中,并可以封装成模块,在其它的序列化器中需要使用时,直接导入即可
  • 外部函数校验命名规则:与普通的函数命名规则相同,无特殊要求,但是要见名之意
  • 外部函数需要在字段中进行调用才可以使用:check_classmate为我们自定义的外部校验函数,在序列化器中的字段中进行调用
classmate = serializers.CharField(validators=[check_classmate])
  • 举例如下:对班级的长度进行校验,长度不为3的校验不通过!
# 外部检验函数
def check_classmate(data):
    """外部校验函数"""
    if len(data) != 3:
        raise serializers.ValidationError(detail='班级编号格式不正确!!!', code='check_classmate')
    return data


# 序列化器中的字段
classmate = serializers.CharField(validators=[check_classmate])
  • data是添加方法的字段的传入值,会自动传入,不需要手动传入
  • 与上述方法一样:校验不通过时,可以抛出异常,校验通过时,需要将数据返回即可!!

总结:

  • 根据自己所需的情况选择合适的校验方法,所有方法都会在视图函数中的is_valid()方法被调用时自动调用,不需要我们手动调用

以上是关于python Django Rest_Framework框架 反序列化时数据校验的三种方法(图文并茂版)的主要内容,如果未能解决你的问题,请参考以下文章

python django怎么读

python的django工程可以用tomcat发布吗

python django能开发大型网站吗

python 中 django 的问题-------- 请高人指点 尽量详细点哦 初学django

Python-Django框架学习笔记——第二课:Django的搭建

如何在python文件中,引用django1.10的model