FastAPI(三)依赖注入

这一部分讲解 FastAPI 依赖注入机制,包括全局依赖、局部依赖及多层依赖的使用。

依赖注入(Dependency Injection,简称 DI)是一种设计模式,它允许我们将对象的依赖关系从对象本身的创建和管理中分离出来。在 FastAPI 中,依赖注入用于将一些通用的逻辑(如身份验证、数据库连接等)封装到独立的函数中,然后在路径操作函数中使用这些依赖项。

from fastapi import FastAPI
from fastapi import Depends
import uvicorn

# 1. 全局依赖注入,每次请求都会执行依赖的可调用对象
def global_dependency1():
    print('全局依赖注入1')

def global_dependency2():
    print('全局依赖注入2')

app = FastAPI(dependencies=[Depends(global_dependency1), Depends(global_dependency2)])


# 2. 局部依赖注入,只有执行该请求时才会执行依赖可调用对象
# 2.1 函数作为依赖项
async def get_config():
    return {'c1': 10, 'c2': 20}

@app.post('/demo01')
async def demo01(param : dict = Depends(get_config)):
    return {'param': param}


# 2.2 类作为依赖项
class Config:
    def __init__(self):
        self.c1 = 10
        self.c2 = 20

@app.post('/demo02')
async def demo02(param : Config = Depends()):
    param.c1 = 100
    param.c2 = 200
    return {'param': param}


# 2.3 多层依赖项
async def get_dependency01():
    return {'c1': 1000, 'c2': 2000}

async def get_dependency02(param : dict = Depends(get_dependency01)):
    return param

@app.post('/demo03')
async def demo03(param : dict = Depends(get_dependency02)):
    return {'param': param}


if __name__ == '__main__':
    uvicorn.run(app, host='127.0.0.1', port=8000)