FastAPI 是一个用于构建 API 的现代、快速(高性能)的 web 框架,基于 Python 3.7+ 的类型提示。它的主要优势在于其简洁的语法、高性能、自动的 API 文档生成以及对异步编程的良好支持。
在 FastAPI 中,你可以通过依赖注入系统来访问请求对象,包括 URL 和路径参数。请求对象通常是 Request
类的实例,它包含了客户端请求的所有信息。
路径参数是在路由定义中指定的变量部分。例如:
from fastapi import FastAPI, Request
app = FastAPI()
@app.get("/items/{item_id}")
async def read_item(request: Request, item_id: int):
return {"item_id": item_id, "url": str(request.url)}
在这个例子中,{item_id}
是一个路径参数,它的值会被传递给 read_item
函数作为 item_id
参数。
URL 参数通常是指查询字符串中的参数。你可以通过 request.query_params
来访问它们:
@app.get("/items/")
async def read_items(request: Request):
query_param = request.query_params.get("q")
return {"query_param": query_param}
在这个例子中,如果请求的 URL 是 /items/?q=somevalue
,那么 query_param
将会是 "somevalue"
。
如果你在路径参数中指定了错误的类型,FastAPI 会在启动时抛出错误。例如:
@app.get("/items/{item_id}")
async def read_item(item_id: str): # 错误:应该是 int 或其他类型
...
解决方法:确保路径参数的类型与实际传递的值相匹配。
如果你的函数依赖于某个查询参数,但客户端没有提供,可能会导致函数执行失败。
解决方法:使用默认值或者检查参数是否存在。
@app.get("/items/")
async def read_items(q: str = None):
if q is None:
return {"error": "Query parameter 'q' is required"}
return {"query_param": q}
以下是一个完整的示例,展示了如何在 FastAPI 中处理路径参数和查询参数:
from fastapi import FastAPI, Request
app = FastAPI()
@app.get("/items/{item_id}")
async def read_item(request: Request, item_id: int):
return {"item_id": item_id, "url": str(request.url)}
@app.get("/items/")
async def read_items(request: Request, q: str = None):
if q is None:
return {"error": "Query parameter 'q' is required"}
return {"query_param": q}
在这个示例中,第一个路由处理带有路径参数的请求,第二个路由处理带有可选查询参数的请求。
通过这种方式,你可以灵活地处理不同类型的请求,并根据需要访问请求的 URL 和路径信息。
领取专属 10元无门槛券
手把手带您无忧上云