【FastAPI】Depends 依赖注入(一)

什么是依赖注入

依赖注入常用于以下场景

  • 共享业务逻辑(复用相同的代码逻辑)
  • 共享数据库连接
  • 实现安全验证角色权限
  • 等……
    上述场景均可以使用依赖注入,将代码重复 最小化

依赖注入的作用

复用相同代码、简化代码

初步使用

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)

mark

将类作为依赖

使用作为依赖注入,在使用参数效果上,会发现与模型类一样,所以一般是在 使用框架提供依赖类使用

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)
发表评论 / Comment

用心评论~