FastAPI 学习笔记

简介:

FastAPI 是一个用于构建 API 的现代、快速(高性能)的 web 框架,使用 Python 并基于标准的 Python 类型提示。

关键特性:

  • 快速:可与 NodeJS 和 Go 并肩的极高性能(归功于 Starlette 和 Pydantic)。最快的 Python web 框架之一

  • 高效编码:提高功能开发速度约 200% 至 300%。*

  • 更少 bug:减少约 40% 的人为(开发者)导致错误。*

  • 智能:极佳的编辑器支持。处处皆可自动补全,减少调试时间。

  • 简单:设计的易于使用和学习,阅读文档的时间更短。

  • 简短:使代码重复最小化。通过不同的参数声明实现丰富功能。bug 更少。

  • 健壮:生产可用级别的代码。还有自动生成的交互式文档。

  • 标准化:基于(并完全兼容)API 的相关开放标准:OpenAPI (以前被称为 Swagger) 和 JSON Schema

Starlette,Pydantic 与 FastAPI 的关系

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

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

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())

fastApi 入门

简单的 Web 应用开发只需要4步即可完成。

  • 创建一个 APP 实例

  • 编写一个路径操作装饰器(如 @app.get("/"))

  • 编写一个路径操作函数

  • 运行开发服务器(如 uvicorn main:app--reload)

1.环境准备

pip install fastapi == 版本号

pip install uvicorn 类似于tomcat 的作用 专为异步 Python Web 应用设计的服务器

  1. 入门案例

from fastapi import FastAPI

创建一个APP实例

app = FastAPI()

添加路径操作装饰器和路径操作函数

@app.get("/")

async def demo():

return {"Hello": "World"}

if name == "main":

import uvicorn

启动服务,注意APP前面的文件名称

uvicorn.run(app='helloWorld:app', host="127.0.0.1", port=8010, reload=True, debug=True)

启动 项目中应用 直接在main 中 uvicorn.run其中包括了多个配置参数

相关推荐
Danceful_YJ13 小时前
31.注意力评分函数
pytorch·python·深度学习
程序员三藏13 小时前
快速弄懂POM设计模式
自动化测试·软件测试·python·selenium·测试工具·设计模式·职场和发展
循环过三天15 小时前
3.1、Python-列表
python·算法
青青草原羊村懒大王15 小时前
python基础知识三
开发语言·python
傻啦嘿哟15 小时前
Python高效实现Word转HTML:从基础到进阶的全流程方案
人工智能·python·tensorflow
wu_jing_sheng016 小时前
深度学习入门:揭开神经网络的神秘面纱(附PyTorch实战)
python
Ace_317508877616 小时前
淘宝店铺全量商品接口实战:分类穿透采集与增量同步的技术方案
大数据·数据库·python
LeonDL16816 小时前
基于YOLO11深度学习的电动车头盔检测系统【Python源码+Pyqt5界面+数据集+安装使用教程+训练代码】【附下载链接】
人工智能·python·深度学习·pyqt5·yolo数据集·电动车头盔检测系统·yolo11深度学习
烤麻辣烫16 小时前
黑马程序员苍穹外卖(新手)Day1
java·数据库·spring boot·学习·mybatis
提娜米苏17 小时前
Bash Shell脚本学习——唇读数据集验证脚本
开发语言·学习·bash