目录
1. 路由基础概述
在 FastAPI 中,路由是用来处理特定 URL 路径的 HTTP 请求。FastAPI 通过装饰器(如 @app.get()
、@app.post()
等)来定义路由和关联的请求方法。每个路由处理一个 HTTP 请求,并且可以定义不同的请求类型(如 GET、POST、PUT、DELETE 等)。
FastAPI 会自动为这些路由生成相应的文档(如 Swagger UI 和 ReDoc),并且支持路径参数、查询参数、请求体等。
2. 定义基本路由
2.1 GET 请求
GET 请求是最常见的 HTTP 请求方法之一,用于请求数据。在 FastAPI 中,使用 @app.get()
来定义一个 GET 请求的路由。
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"message": "Hello, World!"}
在上面的代码中,@app.get("/")
定义了一个根路由,当访问 http://127.0.0.1:8000/
时,会返回 {"message": "Hello, World!"}
的 JSON 响应。
2.2 POST 请求
POST 请求通常用于提交数据。在 FastAPI 中,使用 @app.post()
来定义一个 POST 请求的路由。
@app.post("/items/")
def create_item(item: dict):
return {"item": item}
此路由接收一个 POST 请求并接受一个 JSON 请求体。item
是一个字典(Python 的 dict
),FastAPI 会自动将 JSON 数据解析为字典。你可以通过 POST 请求向 http://127.0.0.1:8000/items/
提交数据。
2.3 PUT 请求
PUT 请求用于更新资源。在 FastAPI 中,使用 @app.put()
来定义一个 PUT 请求的路由。
@app.put("/items/{item_id}")
def update_item(item_id: int, item: dict):
return {"item_id": item_id, "updated_item": item}
此路由通过 PUT 请求更新一个特定 ID 的项,item_id
通过路径参数传递,item
是请求体中的数据。
2.4 DELETE 请求
DELETE 请求用于删除资源。在 FastAPI 中,使用 @app.delete()
来定义一个 DELETE 请求的路由。
@app.delete("/items/{item_id}")
def delete_item(item_id: int):
return {"message": f"Item {item_id} has been deleted."}
此路由通过 DELETE 请求删除特定 ID 的项。
3. 路由参数
3.1 路径参数
路径参数是通过 URL 中的动态部分来传递的值。例如,在 /items/{item_id}
中,item_id
是路径参数。
@app.get("/items/{item_id}")
def read_item(item_id: int):
return {"item_id": item_id}
上面的代码定义了一个 GET 请求的路由,当访问 /items/{item_id}
时,item_id
会作为路径参数传递给 read_item
函数。
3.2 查询参数
查询参数通过 URL 中的 ?key=value
的形式传递。例如,http://127.0.0.1:8000/items/?q=search_term
。在 FastAPI 中,可以通过函数参数来获取查询参数。
@app.get("/items/")
def read_item(q: str = None):
return {"q": q}
如果在 URL 中访问 /items/?q=search_term
,q
参数的值将传递给 read_item
函数。
4. 响应模型
FastAPI 还支持为响应定义模型,使用 Pydantic 模型来验证响应数据。响应模型帮助确保返回的数据符合特定的格式。
from pydantic import BaseModel
class Item(BaseModel):
name: str
price: float
@app.get("/items/{item_id}", response_model=Item)
def read_item(item_id: int):
return {"name": "Sample Item", "price": 12.99}
在这个示例中,Item
是一个 Pydantic 模型,用于定义返回数据的格式。路由 /items/{item_id}
将返回一个符合 Item
模型的数据。
发表回复