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其中包括了多个配置参数

相关推荐
程序员三藏2 分钟前
Web UI自动化测试之PO篇
自动化测试·软件测试·python·selenium·测试工具·职场和发展·测试用例
朱小弟cs67 分钟前
Orange的运维学习日记--16.Linux时间管理
linux·运维·学习
旧时光巷1 小时前
【Flask 基础 ①】 | 路由、参数与模板渲染
后端·python·零基础·flask·web·模板渲染·路由系统
java1234_小锋1 小时前
【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 微博评论IP地图可视化分析实现
python·自然语言处理·flask
golitter.1 小时前
python的异步、并发开发
开发语言·python
两颗泡腾片1 小时前
C++提高编程学习--模板
c++·学习
陈敬雷-充电了么-CEO兼CTO2 小时前
强化学习三巨头PK:PPO、GRPO、DPO谁是大模型训练的「王炸」?
人工智能·python·机器学习·chatgpt·aigc·ppo·grpo
shangyingying_12 小时前
关于神经网络CNN的搭建过程以及图像卷积的实现过程学习
神经网络·学习·cnn
SiYuanFeng3 小时前
【问题未解决-寻求帮助】VS Code 中使用 Conda 环境,运行 Python 后 PowerShell 终端输出内容立即消失
开发语言·python·conda
段ヤシ.3 小时前
Windows环境下安装Python和PyCharm
开发语言·python·pycharm