依赖注入-Depends
常用场景:
- 共享业务逻辑
- 共享数据库链接
- 实现安全、验证、角色权限等
- 导入Depends,传参为可调用对象
"""依赖注入-Depends"""async def common_parameters(q: Optional[str] = None, skip: int = 0, limit: int = 100):return {"q": q, 'skip': skip, "limit": limit}@app.get("/items17")async def read_depends(commons: dict= Depends(common_parameters)):"""依赖注入-Depends"""return commons
类依赖注入
class CommonQueryParams:def __init__(self, q: Optional[str] = None, skip: int = 0, limit: int = 100):self.q = qself.skip = skipself.limit = limit@app.post("/items18")async def read_items18(commons: CommonQueryParams = Depends()):if commons.q is not None:logger.info(f"q不为None")return commons
路径操作依赖项-dependencies
- 路径操作函数中使用的依赖项不需要返回值,例如信息验证、token等等,可在路径餐做函数中添加可选参数dependencies
- dependencies参数为Depends()组成的list
"""路径操作依赖-dependencies"""async def verify_token(x_token: str = Header(...)):if x_token != "fake-super-secret-token":raise HTTPException(status_code=400, detail="X-Token header invalid")async def verify_key(x_key: str = Header(...)):if x_key != "fake-super-secret-key":raise HTTPException(status_code=400, detail="X-Key header invalid")return x_key@app.get("/items18/", dependencies=[Depends(verify_token), Depends(verify_key)])async def read_items18():return [{"item": "Foo"}, {"item": "Bar"}]
全局依赖
app 实例创建时添加dependencies参数注入依赖
app = FastAPI(dependencies=[Depends(…), …])
"""全局依赖"""async def verify_token(x_token: str = Header(...)):if x_token != "fake-super-secret-token":raise HTTPException(status_code=400, detail="X-Token header invalid")async def verify_key(x_key: str = Header(...)):if x_key != "fake-super-secret-key":raise HTTPException(status_code=400, detail="X-Key header invalid")return x_keyapp = FastAPI(dependencies=[Depends(verify_token), Depends(verify_key)])@app.get("/items/")async def read_items():return [{"item": "Portal Gun"}, {"item": "Plumbus"}]
