前言

为啥要学这个,因为 FastAPI 是基于它进行开发的,而且是个不错的框架,所以有必要深入学习

前置学习

Python 类型提示:https://www.cnblogs.com/poloyy/p/15145380.html

typing 模块:https://www.cnblogs.com/poloyy/p/15150315.html

Pydantic 介绍

  • 使用 python 类型注释来进行数据校验和 settings 管理
  • pydantic 可以在代码运行时强制执行类型提示,并在数据校验无效时提供友好的错误提示
  • 定义数据应该如何在规范的 python 代码中保存,然后通过 Python 验证它

Pydantic 安装

pip install pydantic

测试 pydantic 是否已编译

import pydantic

print('compiled:', pydantic.compiled)

# 输出结果
compiled: True

Pydantic 注意事项

  • pydantic 是一个解析库,而不是一个验证库
  • 验证是达到目的一种手段,构建符合所提供的类型和约束的模型
  • 简单来说:pydantic 保证输出模型的类型和约束,而不是输入数据

Models

简介

  • 在 pydantic 中定义对象的主要方法是通过模型(模型是从 BaseModel 继承的类)
  • 所有基于 pydantic 的数据类型本质上都是一个 BaseModel 
  • 可以将模型视为强类型语言中的类型(比如 Java)
  • 不受信任的数据可以传递给模型,经过解析和验证后,pydantic 保证生成的模型实例的字段将符合定义的字段类型(实例字段类型符合类定义的字段类型)

基础模型使用

from pydantic import BaseModel

class User(BaseModel):
id: int
name = "小菠萝测试笔记"
  • User 就是一个模型(Models),有两个字段(属性)
  • id,整数 int 类型,是必传的
  • name,字符串 string 类型,不是必传,有默认值

为什么能知道 name 是 string 类型?

因为默认值是 string 类型,因此不需要类型提示( name : string )

注意:当某些字段没有类型提示时,需要注意有关字段顺序的警告

声明一个有效实例

user = User(id='123')
  • user 是 User 模型的一个实例对象,就叫模型实例对象吧
  • 对象的初始化会执行所有解析和验证,如果没有抛出 ValidationError,证明生成的模型实例是有效的

访问模型实例对象的属性

user = User(id='123')
print(user.id, type(user.id))
print(user.name, type(user.name)) # 输出结果
123 <class 'int'>
小菠萝测试笔记 <class 'str'>
  • id 属性传的是字符串 '123',它会根据模型字段类型进行转换为 int
  • name 属性取了默认值

__fields_set__

该变量返回用户初始化对象时提供了什么字段

# __fields_set__
user = User(id='123') print(user.__fields_set__ == {'id'})
print(user.__fields_set__ == {'name'}) user = User(id='123', name="test") print(user.__fields_set__ == {'id', 'name'})
print(user.__fields_set__ == {'id'}) # 输出结果
True
False
True
False

dict()

可以提供字段的字典对象

# dict()
user = User(id='123')
print(user.dict())
print(dict(user)) # 输出结果
{'id': 123, 'name': '小菠萝测试笔记'}
{'id': 123, 'name': '小菠萝测试笔记'}

修改模型实例对象的属性

# 修改模型实例属性值
user = User(id='123')
user.id = 321
print(user.id) # 输出结果
321

Models 属性

其实就是 BaseModels 有什么自带的方法、属性

dict()

返回模型字段和值,字典格式

user = User(id='123', name="test")
print(user.dict(), type(user.dict())) # 输出结果
{'id': 123, 'name': 'test'} <class 'dict'>

json()

返回模型字段和值,json 字符串格式

user = User(id='123', name="test")
print(user.json(), type(user.json())) # 输出结果
{"id": 123, "name": "test"} <class 'str'>

schema()

以 JSON Schema 形式返回模型,字典格式

user = User(id='123', name="test")

print(user.schema(), type(user.schema()))

# 输出结果
{
"title": "User",
"type": "object",
"properties": {
"id": {
"title": "Id",
"type": "integer"
},
"name": {
"title": "Name",
"default": "小菠萝测试笔记",
"type": "string"
}
},
"required": [
"id"
]
} <class 'dict'>

schema_json()

以 JSON Schema 形式返回模型,json 字符串格式

user = User(id='123', name="test")

print(user.schema_json(), type(user.schema_json()))

# 输出结果
{
"title": "User",
"type": "object",
"properties": {
"id": {
"title": "Id",
"type": "integer"
},
"name": {
"title": "Name",
"default": "小菠萝测试笔记",
"type": "string"
}
},
"required": [
"id"
]
} <class 'str'>

copy()

浅拷贝模型对象

Python - pydantic 入门介绍与 Models 的简单使用的更多相关文章

  1. Dubbo入门介绍---搭建一个最简单的Demo框架

    Dubbo入门---搭建一个最简单的Demo框架 置顶 2017年04月17日 19:10:44 是Guava不是瓜娃 阅读数:320947 标签: dubbozookeeper 更多 个人分类: D ...

  2. 【python】入门:打印字符串、简单计算

  3. [Python爬虫] scrapy爬虫系列 <一>.安装及入门介绍

    前面介绍了很多Selenium基于自动测试的Python爬虫程序,主要利用它的xpath语句,通过分析网页DOM树结构进行爬取内容,同时可以结合Phantomjs模拟浏览器进行鼠标或键盘操作.但是,更 ...

  4. [Python爬虫] 在Windows下安装PhantomJS和CasperJS及入门介绍(上)

    最近在使用Python爬取网页内容时,总是遇到JS临时加载.动态获取网页信息的困难.例如爬取CSDN下载资源评论.搜狐图片中的“原图”等,此时尝试学习Phantomjs和CasperJS来解决这个问题 ...

  5. Python入门介绍

    Python入门介绍(人生苦短,我用 Python) Python简介 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹 ...

  6. Python 基于python操纵redis入门介绍

    基于python操纵redis入门介绍 by:授客  QQ:1033553122 测试环境 redis-3.0.7 CentOS 6.5-x86_64 python 3.3.2 基于Python操作R ...

  7. python从入门到大神---4、python3文件操作最最最最简单实例

    python从入门到大神---4.python3文件操作最最最最简单实例 一.总结 一句话总结: python文件操作真的很简单,直接在代码中调用文件操作的函数比如open().read(),无需引包 ...

  8. Python 正则表达式入门(中级篇)

    Python 正则表达式入门(中级篇) 初级篇链接:http://www.cnblogs.com/chuxiuhong/p/5885073.html 上一篇我们说在这一篇里,我们会介绍子表达式,向前向 ...

  9. Python 正则表达式入门(初级篇)

    Python 正则表达式入门(初级篇) 本文主要为没有使用正则表达式经验的新手入门所写. 转载请写明出处 引子 首先说 正则表达式是什么? 正则表达式,又称正规表示式.正规表示法.正规表达式.规则表达 ...

随机推荐

  1. docker 搭建 redis 集群(哨兵模式)

    文件结构 1. redis-sentinel 1-1. docker-compose.yml 1-2. sentinel 1-2-1 docker-compose.yml 1-2-2 sentinel ...

  2. Mybatis学习(3)实现数据的增删改查

    前面已经讲到用接口的方式编程.这种方式,要注意的一个地方就是.在User.xml  的配置文件中,mapper namespace="com.yihaomen.mybatis.inter.I ...

  3. 第十一章:random库概述

    random库是使用随机数的python标准库 伪随机数:采用梅森旋转算法生成的伪随机序列中的元素 random库主要用于产生随机数 使用random库:import random random库的概 ...

  4. CF277E Binary Tree on Plane

    CF277E Binary Tree on Plane 题目大意 给定平面上的 \(n\) 个点,定义两个点之间的距离为两点欧几里得距离,求最小二叉生成树. 题解 妙啊. 难点在于二叉的限制. 注意到 ...

  5. python03篇 字符串常用方法和文件操作(一)

    一.字符串常用方法 s1 = ' abcsfsfaadfdd ' s = s1.strip() print(s) print(len(s.strip())) print(s.count('a')) # ...

  6. HTTP工作过程(浏览器输入URL到返回HTML页面都经历了什么)

    超文本传送协议(HyperText Transport Protocol,HTTP)是互联网上应用最为广泛的一种网络协议,它工作在应用层,使用TCP的80号端口提供服务.并且HTTP是工作在客户/服务 ...

  7. UI自动化测试框架Gauge 碰到无法识别Undefined Steps 红色波纹标记

    如果碰到无法识别的情况,例如下面的红色波纹,可以试一下: 第一步: 第二步: 不勾选'offline work' 第三部:刷新之后可以重新编译.

  8. SOA-面向服务的架构

    一.什么是SOA? SOA 面向服务架构,是一个架构思想,是跨语言和平台的.SOA宗旨简单明了,根据项目服务完成架构搭建,以服务为基准点完成组件化和模块化.提供服务是项目的基本内容,其他的contro ...

  9. C# BS方向 该如何规划学习?【学习路线指南】

    C#学习路线指南 花费了几天时间整理了C#学习路线图,可以说是纯野生C#程序员成长路线规划,在这里分享下,希望可以帮助到想从事C#开发的同学们.本人阅历尚浅,有些知识点可能分享不正确,希望广大网友评论 ...

  10. 记一次.Net5接入支付宝SDK的小插曲

    由于业务需求,在项目里面要接入支付宝的支付功能,于是在github上找到了支付宝的官方sdk:https://hub.fastgit.org/alipay/alipay-easysdk 先说问题: 在 ...