为啥要学这个,因为 FastAPI 是基于它进行开发的,而且是个不错的框架,所以有必要深入学习
Python 类型提示:https://cloud.tencent.com/developer/article/1864619
typing 模块:https://cloud.tencent.com/developer/article/1866298
pip install pydantic
import pydantic
print('compiled:', pydantic.compiled)
# 输出结果
compiled: True
from pydantic import BaseModel
class User(BaseModel):
id: int
name = "小菠萝测试笔记"
因为默认值是 string 类型,因此不需要类型提示( name : string )
注意:当某些字段没有类型提示时,需要注意有关字段顺序的警告
user = User(id='123')
user = User(id='123')
print(user.id, type(user.id))
print(user.name, type(user.name))
# 输出结果
123 <class 'int'>
小菠萝测试笔记 <class 'str'>
该变量返回用户初始化对象时提供了什么字段
# __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()
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
其实就是 BaseModels 有什么自带的方法、属性
返回模型字段和值,字典格式
user = User(id='123', name="test")
print(user.dict(), type(user.dict()))
# 输出结果
{'id': 123, 'name': 'test'} <class 'dict'>
返回模型字段和值,json 字符串格式
user = User(id='123', name="test")
print(user.json(), type(user.json()))
# 输出结果
{"id": 123, "name": "test"} <class 'str'>
以 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'>
以 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'>
浅拷贝模型对象