目录
一、安装 FastAPI 和 Uvicorn(一个 ASGI 服务器):
1、ASGI 与 WSGI
2、Uvicorn 的特点
二、一个 简单的FastAPI 应用
编辑
三、路由参数与请求体
1. 基础路由
2. 路径参数和查询参数
3、请求体
1)JSON Data
2)multipart/form-data,用于处理文件上传和表单数据的组合。
1、form-data:处理表单数据
2、Multi-part Data,处理文件上传
3)Raw Data:处理纯文本数据
1、从查询参数中传参
2、从请求体中传参
4)Binary Data 格式(二进制)
5)多个请求体参数
FastAPI 是一个现代的、快速(高性能)的 web 框架,用于构建 API。它是 Python 生态中的一种新选择,其设计目的是易于使用,同时保持高性能。FastAPI 基于最新的 ASGI 标准来处理异步请求,因此它支持异步代码,这使得它在处理 I/O 阻塞操作时非常高效。
FastAPI 的主要特性包括:
- 高性能:FastAPI 使用了 Starlette 和 Pydantic 来实现高性能。
- 简洁的代码:FastAPI 鼓励简洁的编码风格。
- 数据验证:FastAPI 自动从请求中获取数据,并验证它们是否符合预期的数据模型。
- 自动文档生成:FastAPI 自动为API 创建交互式文档(使用 Swagger UI 或 ReDoc)。
一、安装 FastAPI 和 Uvicorn(一个 ASGI 服务器):
pip install fastapi uvicorn
科普一下:Uvicorn 是一个高性能的 ASGI (Asynchronous Server Gateway Interface) 服务器,用于部署异步 Python Web 框架和应用。它是基于 Python 的 asyncio 模块和标准库中的 http 服务器模块来实现的。
1、ASGI 与 WSGI
- WSGI (Web Server Gateway Interface): 是一种 Python 标准,定义了 Web 服务器与 Python Web 应用之间的接口。传统的 Python Web 框架如 Flask 和 Django 使用的是 WSGI。
- ASGI (Asynchronous Server Gateway Interface): 是 WSGI 的异步版本,设计用于支持异步代码。FastAPI、Quart 和 Sanic 等现代 Web 框架使用 ASGI。
2、Uvicorn 的特点
- 高性能: Uvicorn 利用了 asyncio 和 uvloop (一个快速的 asyncio 事件循环),可以处理大量并发连接,适合高流量网站。
- 异步支持: Uvicorn 支持异步代码,可以更好地利用硬件资源,减少阻塞等待的时间。
- 简单易用: Uvicorn 提供了一个简单的命令行工具来启动应用,同时也支持配置文件。
二、一个 简单的FastAPI 应用
模块:main.py
python">from fastapi import FastAPIapp = FastAPI()@app.get("/")
async def root():return {"message": "Hello World"}
通过命令行启动应用(切到main.py目录下):
uvicorn main:app --reload
或者在main脚本中直接启动uvicorn:
python">from fastapi import FastAPIapp = FastAPI()@app.get("/")
async def root():return {"message": "Hello World"}# 运行服务器
if __name__ == "__main__":import uvicornuvicorn.run(app, host="localhost", port=8000)
此时访问 http://localhost:8000(http://127.0.0.1:8000)
就可以看到返回的 JSON 对象。
三、路由参数与请求体
1. 基础路由
FastAPI 支持常见的 HTTP 方法,如 GET、POST、PUT、DELETE 等。
python">
from fastapi import FastAPIapp = FastAPI()@app.get("/items/{item_id}")
async def read_item(item_id: int):return {"item_id": item_id}@app.post("/items/")
async def create_item(item: dict):return item@app.put("/items/{item_id}")
async def update_item(item_id: int, item: dict):return {"item_id": item_id, **item}@app.delete("/items/{item_id}")
async def delete_item(item_id: int):return {"item_id": item_id}
定义一个发送请求的脚本:
python">
import requests
import jsondef festapi_request(method, url, headers=None, params=None):if method == 'GET':response = requests.get(url, params=params, headers=headers)elif method == 'POST':response = requests.post(url, data=params, headers=headers)elif method == 'PUT':response = requests.put(url, data=params, headers=headers)elif method == 'DELETE':response = requests.delete(url, params=params, headers=headers)else:raise ValueError('只支持GET