子依赖项
并且,可以按需声明任意深度的子依赖项嵌套层级。
FastAPI 负责处理解析不同深度的子依赖项。
下列代码创建了第一层依赖项:
这段代码声明了类型为 的可选查询参数 q
,然后返回这个查询参数。
这个函数很简单(不过也没什么用),但却有助于让我们专注于了解子依赖项的工作方式。
接下来,创建另一个依赖项函数,并同时用该依赖项自身再声明一个依赖项(所以这也是一个「依赖项」):
- 同时,该函数还声明了类型是 的可选 cookie(
last_query
)
接下来,就可以使用依赖项:
信息
注意,这里在路径操作函数中只声明了一个依赖项,即 query_or_cookie_extractor
。
但 FastAPI 必须先处理 query_extractor
,以便在调用 时使用 query_extractor
返回的结果。
如果在同一个路径操作 多次声明了同一个依赖项,例如,多个依赖项共用一个子依赖项,FastAPI 在处理同一请求时,只调用一次该子依赖项。
FastAPI 不会为同一个请求多次调用同一个依赖项,而是把依赖项的返回值进行「缓存」,并把它传递给同一请求中所有需要使用该返回值的「依赖项」。
小结
千万别被本章里这些花里胡哨的词藻吓倒了,其实依赖注入系统非常简单。
依赖注入无非是与路径操作函数一样的函数罢了。
但它依然非常强大,能够声明任意嵌套深度的「图」或树状的依赖结构。
提示
这些简单的例子现在看上去虽然没有什么实用价值,
但在安全一章中,您会了解到这些例子的用途,