Fast基础学习笔记(一二)

Fastapi优势和特性

Starlette,Pydantic 与 FastAPI 的关系

Pydantic 是一个基于 Python 类型提示来定义数据验证,序列化和文档(使用 JSON 模式)库

Starlette 是一种轻量级的 ASGI 框架/工具包,是构建高性能 Asyncio 服务的理想选择

image-20220723165457685

python的编程语言提示补足type hints发展而来Pydantic库,FatsAPI就是包含了Pydantic和Starlette以及引入新的语言特性组成的

Starlette是轻量级ASGI框架/工具包,ASCI作为一种服务而言的约定适用于FASTAPI,同样WSGI作为服务约定用于Dijango和Flask,其下的白框都是其框架所对应可以pip下载和使用的包,使用频率由近及远

image-20220723170107943

安装依赖包

FastAPI本课程用到环境在txt文档

安装所依赖的包和环境(现在一次性全部安装和之后边学边安装都行)

要求python环境在3.6以上

cmd执行pycharm编辑器的虚拟环境位置

image-20220723171106082

cd /d E:\Users\Slaine\PycharmProjects\pythonProject1\venv\Scripts

activate.bat #执行启动虚拟环境,之后路径前有(venv)标识

cd 到 requirements.txt 文件所在目录下

pip install -r requirements.txt #即可安装

image-20220723171415862

这种报错是把梯子/代理关了就行。

指定镜像源可加速下载,非常有用

pip install  xxxx -i https://pypi.tuna.tsinghua.edu.cn/simple  #指定镜像源可以加速下载

pydantic库学习

pydantic中BaseModel类
数据导入类
校验失败处理
模型类的属性和方法
数据写入文件
递归/嵌套模型

代码详解

from datetime import datetime
from pydantic import BaseModel
from typing import List, Optional
from pathlib import Path

class User(BaseModel):
    id: int  #无默认值所以是必填字段
    name: str = "Slaine Troyard"  #可选字段,有默认字符串
    signup_ts: Optional[datetime] #可选字段,默认为None
    friends: List[int] = []    #列表中元素为int类型或者可转换为int

external_data = {
    
    
    "id": "123",
    "singnup_ts": "2022-7-12 20:51",
    "friends": [1, 2, "3"]  #满足friends要求
}
print("-------------------------------")
#使用python解包方式 ** ,将external_data数据传到类模板中实例化
user = User(**external_data)
print(user.id, user.friends)  #打印出实例化对象指定属性
print(user.dict())   #以字典形式打印出对象内容(字符串3被自动转换为int)

###----校验失败处理
try:
    User(id=1, signup_ts=datetime.today(), friends=[1,2,"not number"])
except ValueError as e:
    print(e.json())  #将报错json格式化
print("----------------------------------")
###模型类的属性和方法
print(user.dict())
print(user.json())
print(user.copy())
print(User.parse_obj(obj=external_data))#解包的方法,解析字典数据
print(User.parse_raw('{"id": "123", "name": "Slaine Troyard", "signup_ts": "2022-7-12 20:51", "friends": [1, 2, 3]}')) #解析原生数据

#数据写入文件
path = Path('pydantic_writin.json')
path.write_text('{"id": "123", "name": "Slaine Troyard", "signup_ts": "2022-7-12 20:51", "friends": [1, 2, 3]}')
print(User.parse_file(path))

print("----------------------------------")
print(user.schema())
print(user.schema_json())#显示输出数据的格式和方案
print(user.construct()) #不检验数据直接创建模型类||与parse_obj相比它不作自动校验
print("----------")
print(User.__fields__.keys())
print("----------------------------------")
####递归/嵌套模型
class Sound(BaseModel):
    sound: str

class Dog(BaseModel):
    birthday: datetime
    weight: float = Optional[None]
    sound: List[Sound]
dogs = Dog(birthday=datetime.today(), weight=12.3, sound=[{
    
    "sound":"wang wang"}, {
    
    "sound": "ying ying"}])
print(dogs.dict())

猜你喜欢

转载自blog.csdn.net/NZXHJ/article/details/126091876
今日推荐