Fork me on GitHub

FastAPI依赖注入系统系列(一) 什么是依赖注入系统

一、简介

FastAPI有一个非常强大但是直观的依赖注入系统,它被设计成简单易用,开发人员使用它可以很简单的与FastAPI中的其它部分集成。

“依赖注入”意味着在程序中,对于你的代码有一种方式去声明它运行时需要的东西。这个东西就被称为“依赖项”。然后FastAPI将会按照你声明提供的依赖项去做任何需要做的事情。

  通常依赖注入可以:

  • 解决代码重复问题
  • 共享数据库连接
  • 加强安全、认证、角色管理等
  • 其它方面

总之,提高代码的复用率。

二、使用

1、创建依赖

它是一个可以像路径操作函数一样接收所有同样参数的函数。

from typing import Optional
from fastapi import FastAPI

app = FastAPI()


async def common_parameters(q: Optional[str] = None, skip: int = 0, limit: int = 10):
    return {"q": q, "skip": skip, "limit": limit}

2、导入Depends

其它路径操作函数如果需要使用就需要先导入Depends。

from typing import Optional
from fastapi import Depends, FastAPI

app = FastAPI()


async def common_parameters(q: Optional[str] = None, skip: int = 0, limit: int = 10):
    return {"q": q, "skip": skip, "limit": limit}

3、声明依赖

在需要使用上述依赖的路径操作函数中进行声明。

from typing import Optional
from fastapi import Depends, FastAPI

app = FastAPI()


async def common_parameters(q: Optional[str] = None, skip: int = 0, limit: int = 10):
    return {"q": q, "skip": skip, "limit": limit}


@app.get("/items/")
async def read_items(commons: dict = Depends(common_parameters)):
    return commons


@app.get("/users/")
async def read_users(commons: dict = Depends(common_parameters)):
    return commons

在路径操作声明依赖项的接收参数以及类型dict(依赖项的返回值是dict类型)。Depends接收一个参数common_parameter(依赖项函数,必须是一个类似函数一样),然后这个参数common-parameter将像路径操作函数一样接收所有参数。

上面的工作方式是当一个新的请求到达后:

  • FastAPI会优先调用依赖,将请求参数,比如查询参数q、skip、limit传递给依赖函数
  • 依赖函数如果有返回值,就会将返回值返回到路径操作函数的参数接收项
  • commons就是依赖函数返回值的接收参数

同时“/users/”和“/items/”依赖项都是common_parameters,这样显然提高了代码的复用率。

 

posted @ 2021-06-07 22:40  iveBoy  阅读(367)  评论(0编辑  收藏  举报
TOP