[FastAPI-31]嵌套注入

发布时间 2023-03-26 20:44:26作者: LeoShi2020
from typing import Union

from fastapi import Depends, FastAPI

app = FastAPI()

'''
嵌套注入
- 路径函数get_name需要的形参`username_or_nickname`有依赖条件,所以FastAPI会调用 `username_or_nickname_extractor`
- 执行`username_or_nickname_extractor`的时候,发现它也有依赖条件,所以FastAPI会调用 `username_extractor`
- 按照这个顺序,依次获取每个有依赖条件的参数的结果。最终,在路径函数内获取最终的结果。
'''

def username_extractor(username: Union[str, None] = None):
    return username


def username_or_nickname_extractor(
    username: str = Depends(username_extractor),
    nickname: Union[str, None] = None,
):
    if not username:
        return nickname
    return username


@app.get("/name")
def get_name(username_or_nickname: str = Depends(username_or_nickname_extractor)):
    return {"username_or_nickname": username_or_nickname}