1. 路径参数 (Path Parameters)
路径参数是 URL 路径的一部分,通常用于标识资源的唯一性。路径参数在 FastAPI 中通过在路由装饰器中使用大括号 {}
来定义。
获取路径参数的方式
from fastapi import FastAPI
app = FastAPI()
@app.get("/items/{item_id}")
def read_item(item_id: int):
return {"item_id": item_id}
示例请求:
- 请求路径:
GET /items/42
- 返回:
{"item_id": 42}
在上面的例子中,item_id
是路径参数,FastAPI 会自动将它解析为函数参数 item_id
。
2. 查询参数 (Query Parameters)
查询参数通过 URL 的查询字符串部分传递,例如 ?key=value
。查询参数通常用于过滤、分页等操作。FastAPI 会自动解析查询参数,并将它们传递给视图函数。
获取查询参数的方式
from fastapi import FastAPI
app = FastAPI()
@app.get("/items")
def read_items(skip: int = 0, limit: int = 10):
return {"skip": skip, "limit": limit}
示例请求:
- 请求路径:
GET /items?skip=10&limit=20
- 返回:
{"skip": 10, "limit": 20}
在这个例子中,skip
和 limit
是查询参数。FastAPI 会自动将它们映射到函数参数,并提供默认值。
3. 请求体参数 (Request Body)
请求体参数用于 POST、PUT、PATCH 请求中,客户端将数据以 JSON 格式或其他格式(如表单数据)发送到服务器。FastAPI 使用 Pydantic 模型来自动验证和解析请求体的数据。
获取请求体参数的方式
from fastapi import FastAPI
from pydantic import BaseModel
class Item(BaseModel):
name: str
price: float
description: str = None
app = FastAPI()
@app.post("/items/")
def create_item(item: Item):
return {"name": item.name, "price": item.price}
示例请求:
- 请求路径:
POST /items/
- 请求体(JSON 格式):
{
"name": "Laptop",
"price": 1200.50
}
- 返回:
{"name": "Laptop", "price": 1200.5}
在上面的例子中,item
是一个请求体参数,FastAPI 会将请求体中的 JSON 数据自动解析为 Item
类的实例。
4. 请求头 (Request Headers)
请求头包含了有关请求的额外信息,例如认证信息、用户代理、内容类型等。FastAPI 可以通过 Request
对象或直接使用 Header
来获取请求头中的数据。
获取请求头的方式
from fastapi import FastAPI, Header
app = FastAPI()
@app.get("/items/")
def read_items(user_agent: str = Header(None)):
return {"User-Agent": user_agent}
示例请求:
- 请求路径:
GET /items/
- 请求头:
User-Agent: Mozilla/5.0
- 返回:
{"User-Agent": "Mozilla/5.0"}
在这个例子中,user_agent
是请求头中的 User-Agent
,FastAPI 使用 Header
函数从请求头中提取该值。
5. 请求 Cookies (Cookies)
FastAPI 可以从请求的 cookies 中获取信息。如果你想从用户的 cookies 中获取值,可以使用 Cookie
函数。
获取请求 cookies 的方式
from fastapi import FastAPI, Cookie
app = FastAPI()
@app.get("/items/")
def read_items(session_id: str = Cookie(None)):
return {"session_id": session_id}
示例请求:
- 请求路径:
GET /items/
- 请求头:
Cookie: session_id=12345
- 返回:
{"session_id": "12345"}
在这个例子中,session_id
是从 cookies 中提取的值。
6. 文件上传 (File Upload)
FastAPI 支持文件上传,可以通过 File
和 UploadFile
类来处理文件上传。UploadFile
提供了更高效的文件处理功能,可以异步读取文件内容。
获取文件上传的方式
from fastapi import FastAPI, File, UploadFile
app = FastAPI()
@app.post("/uploadfile/")
async def upload_file(file: UploadFile = File(...)):
return {"filename": file.filename}
示例请求:
- 请求路径:
POST /uploadfile/
- 请求体:上传的文件
- 返回:
{"filename": "example.txt"}
在这个例子中,file
是一个上传的文件,FastAPI 自动处理文件的上传,并通过 UploadFile
提供对文件的异步访问。
7. 查询参数、路径参数、请求体参数的混合使用
FastAPI 允许在同一路由中混合使用路径参数、查询参数和请求体参数。FastAPI 会根据请求自动将数据映射到函数参数。
示例:
from fastapi import FastAPI
from pydantic import BaseModel
class Item(BaseModel):
name: str
price: float
app = FastAPI()
@app.put("/items/{item_id}")
def update_item(item_id: int, item: Item, discount: float = 0):
return {"item_id": item_id, "name": item.name, "price": item.price, "discount": discount}
示例请求:
- 请求路径:
PUT /items/42?discount=10
- 请求体(JSON 格式):
{
"name": "Laptop",
"price": 1200.50
}
- 返回:
{"item_id": 42, "name": "Laptop", "price": 1200.5, "discount": 10}
在这个例子中,item_id
是路径参数,item
是请求体参数,discount
是查询参数。
FastAPI 提供了多种灵活的方式来获取请求中的参数,包括:
- 路径参数:通过 URL 路径部分传递,常用于标识资源。
- 查询参数:通过 URL 查询字符串传递,适用于过滤、排序等操作。
- 请求体参数:通过 POST、PUT、PATCH 请求的请求体传递,通常使用 Pydantic 模型进行验证。
- 请求头:通过
Header
获取 HTTP 请求头中的数据。 - 请求 Cookies:通过
Cookie
获取请求中的 cookies。 - 文件上传:通过
File
和UploadFile
处理文件上传。