推荐答案
FastAPI 的依赖注入系统通过 Python 的类型注解和依赖项函数来实现。依赖项函数可以是一个普通的 Python 函数,也可以是异步函数。FastAPI 会自动解析这些依赖项,并在需要时注入到路径操作函数中。依赖注入系统的主要特点包括:
- 依赖项声明:通过函数参数的类型注解声明依赖项。
- 依赖项解析:FastAPI 自动解析依赖项,并确保它们在路径操作函数执行前被调用。
- 依赖项共享:依赖项可以在多个路径操作函数之间共享,避免重复代码。
- 依赖项层级:依赖项可以嵌套,形成依赖项层级结构。
本题详细解读
1. 依赖项声明
在 FastAPI 中,依赖项通常通过函数参数的类型注解来声明。例如:
-- -------------------- ---- ------- ---- ------- ------ -------- ------- --- - --------- --- -------------------- --- - ----- ----- --- - -- ------ --- - ----- ------ ----- -- ------- ----- -------- ------ ------------------- ----- --- ------------------- ---- - ---------------------------- ------ -------
在这个例子中,common_parameters
函数是一个依赖项,它通过 Depends
注入到 read_items
路径操作函数中。
2. 依赖项解析
FastAPI 会自动解析依赖项,并确保它们在路径操作函数执行前被调用。例如,在上面的代码中,common_parameters
函数会在 read_items
函数执行前被调用,并将结果传递给 read_items
函数。
3. 依赖项共享
依赖项可以在多个路径操作函数之间共享。例如:
@app.get("/users/") async def read_users(commons: dict = Depends(common_parameters)): return commons
在这个例子中,common_parameters
依赖项被 read_items
和 read_users
两个路径操作函数共享。
4. 依赖项层级
依赖项可以嵌套,形成依赖项层级结构。例如:
-- -------------------- ---- ------- --- ------------------ --- - ------ ------ - --- -------------------------- -- --- - ------------------------- ----------- --- - ------------ -- -- --- -- ------ ---------- ------ - ------------------- ----- --- ---------------------------- --- - ------------------------------------ ------ --------------- -----------------
在这个例子中,query_or_cookie_extractor
依赖项依赖于 query_extractor
依赖项,形成了依赖项层级结构。