note
- FastAPI 是一个现代的、快速(高性能)的 Web 框架,用于构建 API(应用程序编程接口)。它基于 Python 3.7+,使用了 Python 类型提示(type hints),并且具有自动化的文档功能。
一、FastAPI
简介:FastAPI 是一个现代的、快速(高性能)的 Web 框架,用于构建 API(应用程序编程接口)。它基于 Python 3.7+,使用了 Python 类型提示(type hints),并且具有自动化的文档功能。
(1)安装fastapi
# 安装 FastAPI 和一个异步 HTTP 服务器(比如 Uvicorn)
pip install fastapi uvicorn
(2)创建一个简单的 FastAPI 应用
main.py
内容如下:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def read_root():
return {"message": "Hello World"}
(3)终端运行:uvicorn main:app --reload
- uvicorn 是 HTTP 服务器。
- main 是你的 Python 文件名(main.py)。
- app 是你在文件中创建的 FastAPI 实例。
- –reload 是一个开发选项,它会在代码更改时自动重新加载服务器。
运行后,你会看到类似这样的输出:
INFO: Started server process [12345]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://1234.0.0.1:8000 (Press CTRL+C to quit)
(4)访问你的 API
打开浏览器,访问 http://127.0.0.1:8000,你会看到返回的 JSON 数据:
{
"message": "Hello World"
}
(5)查看自动生成的文档
FastAPI 会自动为你生成文档,你可以通过以下两个链接访问:
- http://127.0.0.1:8000/docs:使用 Swagger UI
- http://127.0.0.1:8000/redoc:使用 ReDoc
这些文档会根据你的代码自动生成
(6)添加更多路由:可以添加更多的路由来处理不同的请求,比如:
@app.get("/items/{item_id}")
async def read_item(item_id: int, q: str = None):
return {"item_id": item_id, "q": q}
/items/{item_id}
是一个路径参数,item_id
是一个整数。- q 是一个可选的查询参数。
访问 http://127.0.0.1:8000/items/1?q=somequery,你会看到返回:
{
"item_id": 1,
"q": "somequery"
}
(7)使用请求体
FastAPI 可以轻松处理 JSON 请求体
from pydantic import BaseModel
class Item(BaseModel):
name: str
description: str = None
price: float
tax: float = None
@app.post("/items/")
async def create_item(item: Item):
return item
- Item 是一个 Pydantic 模型,用于定义请求体的结构。
- 使用
@app.post
来定义一个 POST 请求。
可以通过文档页面(http://127.0.0.1:8000/docs)测试这个 POST 请求,输入 JSON 数据:
{
"name": "Item1",
"description": "This is an item",
"price": 9.99,
"tax": 1.0
}
二、Pydantic定义和校验数据类型
Pydantic 是一个 Python 库,用于 数据验证 和 设置管理。它的名字来源于 Python 和 valid(验证)的结合。Pydantic 的核心功能是通过 Python 类型提示(Type Hints) 来验证数据的类型和结构。
在 FastAPI 中,Pydantic 主要用于定义 请求体(Request Body) 的结构。当你需要接收用户发送的 JSON 数据时,Pydantic 可以确保这些数据的格式是正确的。
Reference
[1] https://fastapi.tiangolo.com/
[2] http://www.datawhale.cn/learn/summary/164
[3] fastapi教程:https://hongtaoh.com/cn/2024/09/01/fastapi/