推荐答案
在 FastAPI 中,定义路由的方式是通过使用装饰器 @app.get()
、@app.post()
、@app.put()
、@app.delete()
等来定义不同的 HTTP 方法的路由。以下是一个简单的示例:
-- -------------------- ---- ------- ---- ------- ------ ------- --- - --------- ------------- --- ------------ ------ ----------- ------- -------- -------------------- --- ----------------- ------ ------ -------- -----
在这个示例中:
@app.get("/")
定义了一个处理 GET 请求的路由,路径为根路径/
。@app.post("/items/")
定义了一个处理 POST 请求的路由,路径为/items/
。
本题详细解读
1. 路由的基本概念
在 FastAPI 中,路由是指将 HTTP 请求映射到相应的处理函数的过程。每个路由都对应一个特定的 URL 路径和 HTTP 方法(如 GET、POST、PUT、DELETE 等)。
2. 路由的定义方式
FastAPI 使用装饰器来定义路由。常见的装饰器包括:
@app.get(path)
:定义处理 GET 请求的路由。@app.post(path)
:定义处理 POST 请求的路由。@app.put(path)
:定义处理 PUT 请求的路由。@app.delete(path)
:定义处理 DELETE 请求的路由。
其中,path
是 URL 路径,可以是字符串或包含路径参数的路径。
3. 路径参数和查询参数
FastAPI 支持在路径中使用路径参数和查询参数。例如:
@app.get("/items/{item_id}") def read_item(item_id: int, q: str = None): return {"item_id": item_id, "q": q}
在这个示例中:
item_id
是路径参数,类型为int
。q
是查询参数,类型为str
,并且是可选的。
4. 请求体和响应模型
FastAPI 支持使用 Pydantic 模型来定义请求体和响应模型。例如:
-- -------------------- ---- ------- ---- -------- ------ --------- ----- ---------------- ----- --- ------------ --- - ---- ------ ----- ---- ----- - ---- -------------------- --- ----------------- ------ ------ ----
在这个示例中,Item
是一个 Pydantic 模型,用于定义请求体的结构。
5. 异步路由处理
FastAPI 支持异步路由处理函数。例如:
@app.get("/async/") async def read_async(): return {"message": "This is an async route"}
异步路由处理函数使用 async def
定义,适用于处理 I/O 密集型操作。
6. 路由的依赖注入
FastAPI 支持依赖注入,可以在路由处理函数中注入依赖项。例如:
from fastapi import Depends def common_parameters(q: str = None, skip: int = 0, limit: int = 100): return {"q": q, "skip": skip, "limit": limit} @app.get("/items/") def read_items(commons: dict = Depends(common_parameters)): return commons
在这个示例中,common_parameters
是一个依赖项,通过 Depends
注入到 read_items
函数中。
7. 路由的路径操作
FastAPI 提供了丰富的路径操作功能,包括路径参数、查询参数、请求体、响应模型、依赖注入等,使得路由定义更加灵活和强大。