一、简介
FastAPI有一个非常强大但是直观的依赖注入系统,它被设计成简单易用,开发人员使用它可以很简单的与FastAPI中的其它部分集成。
“依赖注入”意味着在程序中,对于你的代码有一种方式去声明它运行时需要的东西。这个东西就被称为“依赖项”。然后FastAPI将会按照你声明提供的依赖项去做任何需要做的事情。
通常依赖注入可以:
- 解决代码重复问题
- 共享数据库连接
- 加强安全、认证、角色管理等
- 其它方面
总之,提高代码的复用率。
二、使用
1、创建依赖
它是一个可以像路径操作函数一样接收所有同样参数的函数。
from typing import Optional from fastapi import FastAPI app = FastAPI() async def common_parameters(q: Optional[str] = None, skip: int = 0, limit: int = 10): return {"q": q, "skip": skip, "limit": limit}
2、导入Depends
其它路径操作函数如果需要使用就需要先导入Depends。
from typing import Optional from fastapi import Depends, FastAPI app = FastAPI() async def common_parameters(q: Optional[str] = None, skip: int = 0, limit: int = 10): return {"q": q, "skip": skip, "limit": limit}
3、声明依赖
在需要使用上述依赖的路径操作函数中进行声明。
from typing import Optional from fastapi import Depends, FastAPI app = FastAPI() async def common_parameters(q: Optional[str] = None, skip: int = 0, limit: int = 10): return {"q": q, "skip": skip, "limit": limit} @app.get("/items/") async def read_items(commons: dict = Depends(common_parameters)): return commons @app.get("/users/") async def read_users(commons: dict = Depends(common_parameters)): return commons
在路径操作声明依赖项的接收参数以及类型dict(依赖项的返回值是dict类型)。Depends接收一个参数common_parameter(依赖项函数,必须是一个类似函数一样),然后这个参数common-parameter将像路径操作函数一样接收所有参数。
上面的工作方式是当一个新的请求到达后:
- FastAPI会优先调用依赖,将请求参数,比如查询参数q、skip、limit传递给依赖函数
- 依赖函数如果有返回值,就会将返回值返回到路径操作函数的参数接收项
- commons就是依赖函数返回值的接收参数
同时“/users/”和“/items/”依赖项都是common_parameters,这样显然提高了代码的复用率。