FastApi-参数验证的正确使用(3)

前言

本文是该专栏的第3篇,后面会持续分享FastApi以及项目实战的各种干货知识,值得关注。

继本专栏上一篇详细介绍FastApi的参数接收,本文再详细来介绍FastApi的参数验证。在python中推荐使用成熟的第三方库进行数据验证,这样不仅可以少写一些if .. else语句,还能让代码的可读性更强。

而本文要介绍的参数验证,这里就需要用到Pydantic,它是一个用于数据验证和设置的python库,特别是用于验证数据模型。它通过声明性的方式定义数据模型,并提供了强大的数据验证和转换功能。Pydantic最初是为FastApi框架设计的,但它也可以在其它python项目中独立使用。

而针对在参数验证中,需要注意的使用事项以及相关知识点将结合实际项目代码进行详细说明,下面跟着笔者直接往下看正文。(附带完整代码)

正文

需要注意的是,本文提及和使用到的pydantic版本为: 1.10.11,而不同的pydantic版本,可能会存在差异。使用pydantic的本质,其实就是如何编写对应的数据验证规则,接下来,将结合实际代码例子进行说明。


1. 常用验证

如下所示,是一些比较常用的验证规则:

基本数据类型:int,float,str,bool;

可选参数:Optional[type] 表示可选参数,Union[x,None] 也可以表示可选;

整数范围:结合conint函数判断数字范围,比如age:conint(ge=18, le=30);需要注意的是,这里的ge:表示大于等于,gt:大于,le:小于等于,lt:小于;

字符长度:结合constr函数判断字符长度,比如constr(min_length=6, max_length=10);

正则表达式:使用constr函数中的参数regex ,可以用于进行正则表达式验证;

枚举验证: 使用Enum 定义枚举类,验证;

列表类型:使用List[type] 来限制列表值的类型,并尝试把参数转成对应的类型;

字典类型: Dict[key_type, value_type] 来限制字典key和val类型,并尝试把参数转成对应的类型。

示例代码如下所示:

from enum import Enum
from typing import Union, Optional, List, Dict# 导入pydantic对应的模型基类
from pydantic import BaseModel, constr, conintclass GenderEnum(str, Enum):"""性别枚举"""male = "男"female = "女"class PydanticVerifyParam(BaseModel):"""用来学习使用pydantic模型验证"""user_name: str  # 基本类型age: conint(ge=18, le=30)  # 整数范围:18 <= age <= 30password: constr(min_length=6, max_length=10)  # 字符长度phone: constr(regex=r'^1\d{10}$')  # 正则验证手机号address: Optional[str] = None  # 可选参数sex: GenderEnum  # 枚举验证,只能传: 男和女likes: List[str]  # 值会自动转成传字符串列表scores: Dict[str, float]  # key会转成字符串,val 会转成浮点型

需要注意的是,在上面列举的例子,在实际使用中可以组合进行多项“组合”使用,比如items:List[constr(min_length=1, max_length=3)] : 限制列表中的每个字符串长度的范围


2. 自定义验证

在自定义验证中,可以使用@validator装饰器用于定义自定义验证函数,具体代码示例如下:

from pydantic import BaseModel, constr, conint, validator
...
class PydanticVerifyParam(BaseModel):"""用来学习使用pydantic模型验证"""user_name: str  # 基本类型...@validator("user_name")def validateUsername(cls, value: str):"""自定义验证函数"""if value.find("傻") > -1:raise ValueError("user_name不能包含敏感词")return value      

验证结果,示例如下:

// 当参数user_name传:是不是傻
{"detail": [{"loc": ["body","user_name"],"msg": "user_name不能包含敏感词","type": "value_error"}]
}

3. 其他验证

EmailStr:用于验证字符串是否是有效的电子邮件地址;

IPvAnyAddress:用于验证字符串是否是有效的 IPv4 或 IPv6 地址;

StrictBool:用于验证字符串是否是严格的布尔值(true 或 false);

AnyHttpUrl:用于验证字符串是否是有效的 URL,包括以 http 或 https 开头的 URL

如果还想了解FastApi以及项目实战的其他干货知识,我会在后面持续更新记得收藏并点赞,后面的python干货在等着你。

如果喜欢本文或者本文对你有帮助的话,记得收藏并点赞,有问题和需求欢迎留言私信

FastApi-参数接收的正确使用(2)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/637899.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ThinkPad T14/T15/P14s/P15s gen2电脑原厂Win10系统镜像 恢复笔记本出厂时预装自带OEM系统

lenovo联想原装出厂Windows10系统&#xff0c;适用型号&#xff1a; ThinkPad T14 Gen 2&#xff0c;ThinPad T15 Gen 2&#xff0c;ThinkPad P14s Gen 2&#xff0c;ThinkPad P15s Gen 2 &#xff08;20W1,20W5,20VY,20W7,20W0,20W4,20VX,20W6&#xff09; 链接&#xff1…

Redis在Windows10中安装和配置

1.首先去下载Redis 这里不给出下载地址&#xff0c;自己可以用去搜索一下地址 下载 下载完成后解压到D盘redis下&#xff0c;本人用的是3.2.100 D:\Redis\Redis-x64-3.2.100 2.解压完成后需要设置环境变量&#xff0c;这里新建一个系统环境变量中path 中添加一个文件所…

WCP知识分享平台的容器化部署

1. 什么是WCP? WCP是一个知识管理、分享平台,支持针对文档(包括pdf,word,excel等)进行实时解析、索引、查询。 通过WCP知识分享平台进行知识信息的收集、维护、分享。 通过知识创建、知识更新、知识检索、知识分享、知识评价、知识统计等功能进行知识生命周期管理。 wcp官…

oracleFUNCTION,PROCEDURE和PACKAGE区别

function 和procedure是PL/SQL代码的集合&#xff0c;通常为了完成一个任务。procedure 不需要返回任何值, 而function将返回一个值. 在另一方面&#xff0c;Package是为了完成一个商业功能的一组function和procedure的集合。 返回值&#xff1a;函数有一个返回值&#xff0c;…

第04章_IDEA的安装与使用(上)(认识,卸载与安装,JDK相关设置,详细设置,工程与模块管理,代码模板的使用)

文章目录 第04章_IDEA的安装与使用&#xff08;上&#xff09;本章专题与脉络1. 认识IntelliJ IDEA1.1 JetBrains 公司介绍1.2 IntelliJ IDEA 介绍1.3 IDEA的主要优势&#xff1a;(vs Eclipse)1.4 IDEA 的下载 2. 卸载与安装2.1 卸载过程2.2 安装前的准备2.3 安装过程2.4 注册2…

Java使用Netty实现端口转发Http代理Sock5代理服务器

Java使用Netty实现端口转发&Http代理&Sock5代理服务器.md 一、简介1.功能2.参数配置3.程序下载4.程序启动5.源码 一、简介 这里总结整理了之前使用Java写的端口转发、Http代理、Sock5代理程序&#xff0c;放在同一个工程中&#xff0c;方便使用。 开发语言&#xff1a…

【小笔记】算法训练基础超参数调优思路

【学而不思则罔&#xff0c;思维不学则怠】 本文总结一下常见的一些算法训练超参数调优思路&#xff08;陆续总结更新&#xff09;&#xff0c;包括&#xff1a; batchsize学习率epochsdropout&#xff08;待添加&#xff09; Batch_size 2023.9.29 简单来说&#xff0c;较…

学习笔记之——3D Gaussian SLAM,SplaTAM配置(Linux)与源码解读

SplaTAM全称是《SplaTAM: Splat, Track & Map 3D Gaussians for Dense RGB-D SLAM》&#xff0c;是第一个&#xff08;也是目前唯一一个&#xff09;开源的用3D Gaussian Splatting&#xff08;3DGS&#xff09;来做SLAM的工作。 在下面博客中&#xff0c;已经对3DGS进行了…

基于springboot+vue的宠物领养系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 背景及意…

C++参悟:正则表达式库regex

正则表达式库regex 一、概述二、快速上手Demo1. 查找字符串2. 匹配字符串3. 替换字符串 三、类关系梳理1. 主类1. basic_regex 2. 算法1. regex_match2. regex_search3. regex_replace 3. 迭代器4. 异常5. 特征6. 常量1. syntax_option_type2. match_flag_type3. error_type 一…

DDD系列 - 第10讲 聚合

目录 一、聚合二、识别聚合2.1 完整性2.2 独立性2.3 纵览全局三、聚合与面向对象的关系四、聚合间的协作五、商品聚合示例一、聚合 介绍完实体和值对象,最后我们再来看看聚合的概念: 聚合是包含了实体和值对象的—个边界(代码层面的一个高内聚低耦合的包)聚合内包含的实体…

开发安全之:Cross-Site Scripting: Poor Validation

Overview 在 php 中&#xff0c;程序会使用 HTML、XML 或其他类型的编码&#xff0c;但这些编码方式并不总是能够防止恶意代码访问 Web 浏览器。 Details 使用特定的编码函数&#xff08;例如 htmlspecialchars() 或 htmlentities()&#xff09;能避免一部分 cross-site scr…

Unity animator动画倒放的方法

在Unity中&#xff0c; 我们有时候不仅需要animator正放的效果&#xff0c;也需要倒放的效果。但我们在实际制作动画的时候可以只制作一个正放的动画&#xff0c;然后通过代码控制倒放。 实现方法其实很简单&#xff0c;只需要把animator动画的speed设置为-1即为倒放&#xff…

MySQL修炼手册11:事务处理:确保数据的一致性与完整性

写在开头 在探索数据管理的世界中&#xff0c;理解如何在数据库中使用事务处理&#xff0c;无疑是一项关键的能力。在处理复杂的数据库操作&#xff0c;尤其是在你试图在多个表或数据库中更新数据时&#xff0c;事务可以确保这些更改具有原子性、一致性、隔离性和持久性&#…

科技护航 智慧军休打通医养结合最后一公里

“小度小度&#xff0c;请帮我打电话给医生。” “好的&#xff0c;马上呼叫植物路军休所医生。” 2023年9月25日&#xff0c;常年独居、家住广西南宁市植物路军休所的军休干部程老&#xff0c;半夜突发疾病&#xff0c;让他想不到的是&#xff0c;这个常年伴他左右的“小度”…

Centos 8 安装 Elasticsearch

简介&#xff1a;CentOS 8是一个基于Red Hat Enterprise Linux&#xff08;RHEL&#xff09;源代码构建的开源操作系统。它是一款稳定、可靠、安全的服务器操作系统&#xff0c;适合用于企业级应用和服务的部署。CentOS 8采用了最新的Linux内核和软件包管理系统&#xff0c;提供…

Vue3新特性defineModel()便捷的双向绑定数据

官网介绍 传送门 配置 要求&#xff1a; 版本&#xff1a; vue > 3.4(必须&#xff01;&#xff01;&#xff01;)配置&#xff1a;vite.config.js 使用场景和案例 使用场景&#xff1a;父子组件的数据双向绑定&#xff0c;不用emit和props的繁重代码 具体案例 代码实…

考试查分场景重保背后,我们如何进行可用性测试

作者&#xff1a;暮角 随着通过互联网音视频与知识建立连接的新学习方式在全国范围内迅速普及&#xff0c;在线教育/认证考试的用户规模呈井喷式增长。但教育容不得半点马虎与妥协&#xff0c;伴随用户规模不断增长&#xff0c;保证系统稳定性、有效避免千万考生考试时遭遇故障…

Ubuntu 在更新内核后 Virtual Box 不能为虚拟电脑打开一个新任务

前言 我也不知道啥时候自动给我更新了内核&#xff0c;重启电脑之后我的内核升级成6.5.0-14-generic&#xff0c;导致Virtual Box无法找到内核文件。 解决方法 方法1 sudo apt update sudo apt install linux-headers-generic build-essential dkms sudo apt remove virtua…

Elasticsearch:将数据从 Snowflake 摄取到 Elasticsearch

作者&#xff1a;来自 Elastic Ashish Tiwari 为了利用 Elasticsearch 提供的强大搜索功能&#xff0c;许多企业在 Elasticsearch 中保留可搜索数据的副本。 Elasticsearch 是一种经过验证的技术&#xff0c;适用于传统文本搜索以及用于语义搜索用例的向量搜索。 Elasticsearch…