什么是依赖注入
依赖注入常用于以下场景
共享
业务逻辑(复用
相同的代码逻辑)共享
数据库连接- 实现
安全
、验证
、角色权限
- 等……
上述场景均可以使用依赖注入,将代码重复 最小化
。
依赖注入的作用
复用
相同代码、简化
代码
初步使用
from fastapi import FastAPI, Depends from typing import Optional import uvicorn app = FastAPI() # 定义一个依赖 async def common_fun(page: int = 1, limit: Optional[int] = 10): return {'page': page, 'limit': limit, 'msg': '依赖被调用'} @app.get('/books') async def get_books( common: dict = Depends(common_fun)): # 添加依赖 return common if __name__ == '__main__': uvicorn.run(app)
将类作为依赖
使用
类
作为依赖注入
,在使用参数
的效果
上,会发现与模型类
一样,所以一般是在 使用框架提供
的依赖类
时使用
from pydantic import BaseModel class QueryBookModel(BaseModel): page: int = 1 limit: Optional[int] = 3
from fastapi import FastAPI, Depends from typing import Optional import uvicorn app = FastAPI() fake_books_db = [ {'book_name': '遥远的救世主'}, {'book_name': '天幕红尘'}, {'book_name': '背叛'}, ] # 定义一个类 class QueryBook(object): def __init__(self, page: int = 1, limit: Optional[int] = 3): self.page = page self.limit = limit @app.get('/books') async def get_books( # 三种写法 common: QueryBook = Depends(QueryBook), # 添加依赖 # common: Depends(QueryBook) = Depends(), # 添加依赖 # common = Depends(QueryBook) # 添加依赖 ): res = list() # 使用 page、limit 组合返回值 for num in range(common.page): res.append([{'book_name': fake_books_db[_]['book_name']} for _ in range(common.limit)]) return res if __name__ == '__main__': uvicorn.run(app)
版权声明:《 【FastAPI】Depends 依赖注入(一) 》为明非原创文章,转载请注明出处!
最后编辑:2022-2-18 07:02:33