IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> python djangoDRF框架 反序列化时数据校验的三种方法(图文并茂版) -> 正文阅读

[Python知识库]python djangoDRF框架 反序列化时数据校验的三种方法(图文并茂版)

注意:

  • 下述三个数据校验的方法,都会在视图函数中的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知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-04-01 23:20:55  更:2022-04-01 23:22:04 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 20:24:44-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码