推荐答案
在 FastAPI 中,可以通过将类作为依赖项注入到路由处理函数中。以下是一个简单的示例:
// www.javascriptcn.com code example
from fastapi import FastAPI, Depends
app = FastAPI()
class MyDependency:
def __init__(self, name: str):
self.name = name
def greet(self):
return f"Hello, {self.name}!"
def get_dependency(name: str = "World"):
return MyDependency(name)
@app.get("/greet")
async def greet(dependency: MyDependency = Depends(get_dependency)):
return {"message": dependency.greet()}在这个示例中,MyDependency 类被用作依赖项,并通过 get_dependency 函数进行实例化。Depends 用于将依赖项注入到路由处理函数 greet 中。
本题详细解读
1. 依赖项类的定义
首先,我们定义了一个类 MyDependency,它有一个构造函数 __init__ 和一个方法 greet。这个类将作为依赖项被注入到路由处理函数中。
class MyDependency:
def __init__(self, name: str):
self.name = name
def greet(self):
return f"Hello, {self.name}!"2. 依赖项工厂函数
接下来,我们定义了一个工厂函数 get_dependency,它负责创建 MyDependency 的实例。这个函数可以接受参数(如 name),并将这些参数传递给 MyDependency 的构造函数。
def get_dependency(name: str = "World"):
return MyDependency(name)3. 依赖项注入
在路由处理函数 greet 中,我们使用 Depends 将 get_dependency 函数返回的 MyDependency 实例注入到函数参数 dependency 中。
@app.get("/greet")
async def greet(dependency: MyDependency = Depends(get_dependency)):
return {"message": dependency.greet()}4. 运行效果
当你访问 /greet 路由时,FastAPI 会自动调用 get_dependency 函数来创建 MyDependency 实例,并将其注入到 greet 函数中。最终,greet 函数会返回一个包含问候消息的 JSON 响应。
{
"message": "Hello, World!"
}5. 参数化依赖项
你还可以通过传递参数来定制依赖项的行为。例如,如果你访问 /greet?name=FastAPI,那么 get_dependency 函数会接收到 name="FastAPI",并返回一个包含该名称的 MyDependency 实例。
{
"message": "Hello, FastAPI!"
}通过这种方式,你可以灵活地使用类作为依赖项,并根据需要传递参数来定制依赖项的行为。