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

相关推荐
这里有鱼汤9 分钟前
给你的DeepSeek装上实时行情,让他帮你炒股
后端·python·mcp
DKPT25 分钟前
Java享元模式实现方式与应用场景分析
java·笔记·学习·设计模式·享元模式
Tomorrow'sThinker43 分钟前
[特殊字符] Excel 读取收件人 + Outlook 批量发送带附件邮件 —— Python 自动化实战
python·excel·outlook
JosieBook1 小时前
【Java编程动手学】Java常用工具类
java·python·mysql
Green1Leaves1 小时前
pytorch学习-11卷积神经网络(高级篇)
pytorch·学习·cnn
灵智工坊LingzhiAI3 小时前
人体坐姿检测系统项目教程(YOLO11+PyTorch+可视化)
人工智能·pytorch·python
DKPT8 小时前
Java桥接模式实现方式与测试方法
java·笔记·学习·设计模式·桥接模式
好好研究10 小时前
学习栈和队列的插入和删除操作
数据结构·学习
烛阴11 小时前
简单入门Python装饰器
前端·python
新中地GIS开发老师11 小时前
新发布:26考研院校和专业大纲
学习·考研·arcgis·大学生·遥感·gis开发·地理信息科学