其他分享
首页 > 其他分享> > FastAPI(29)- Dependencies 依赖注入的初步使用

FastAPI(29)- Dependencies 依赖注入的初步使用

作者:互联网

FastAPI(29)- Dependencies 依赖注入的初步使用 

 

FastAPI 的依赖注入

 

什么是依赖注入

 

依赖注入有什么作用

 

FastAPI 的兼容性

依赖注入系统的简单性使得 FastAPI 兼容:

 

依赖注入的简单栗子

第一步:创建依赖项

from typing import Optional

# 1、编写依赖项
async def common_parameters(q: Optional[str] = None,
                            skip: int = 0,
                            limit: int = 100):
    return {"q": q, "skip": skip, "limit": limit}

 

第二步:导入 Depends

from typing import Optional
# 2、导入 Depends
from fastapi import Depends


# 1、编写依赖项函数
async def common_parameters(q: Optional[str] = None,
                            skip: int = 0,
                            limit: int = 100):
    return {"q": q, "skip": skip, "limit": limit}

 

第三步:声明 Depends,完成依赖注入

#!usr/bin/env python
# -*- coding:utf-8 _*-
"""
# author: 小菠萝测试笔记
# blog:  https://www.cnblogs.com/poloyy/
# time: 2021/9/24 1:08 下午
# file: 25_dependency.py
"""
from typing import Optional, Dict, Any
# 2、导入 Depends
from fastapi import Depends, FastAPI

import uvicorn

app = FastAPI()


# 1、编写依赖项函数
async def common_parameters(q: Optional[str] = None,
                            skip: int = 0,
                            limit: int = 100):
    return {"q": q, "skip": skip, "limit": limit}


# 3、编写路径操作函数,参数声明为 Depends
@app.get("/items")
async def read_items(commons: Dict[str, Any] = Depends(common_parameters)):
    return commons


if __name__ == "__main__":
    uvicorn.run(app="25_dependency:app", host="127.0.0.1", port=8080, reload=True, debug=True)

 

当请求 /items 时,FastAPI 会做哪些事?

  1. 通过正确的参数调用依赖项函数 common_parameters
  2. 从依赖项函数中获取 return 值 
  3. 将返回值赋值给路径操作函数中的参数 commons
  4. 执行完依赖项函数后,才会执行路径操作函数

 

解析 commons: Dict[str, Any] = Depends(common_parameters)

 

正确传参的请求结果

直接在 Swagger API 文档上测试了,顺便看看长啥样

 

请求数据验证失败的请求结果

即使是依赖项,FastAPI 也会对它做数据验证,不符合类型则报错

 

async 或 not async

# 非 async 依赖项
def test_dep(name: str):
    return name


# async 路径操作函数
@app.get("/name")
async def test_name(name: str = Depends(test_dep)):
    return name


# async 依赖项
async def test_user_info(info: dict):
    return info


# 非 async 路径操作函数
@app.get("/info")
def test_info(info: dict = Depends(test_user_info)):
    return info

 

依赖项函数参数类型是一个字典

from typing import Optional, Dict, Any
# 2、导入 Depends
from fastapi import Depends, FastAPI

import uvicorn

app = FastAPI()


# 1、编写依赖项
async def common_parameters(*,
                            q: Optional[str] = None,
                            skip: int = 0,
                            limit: int = 100,
                            # 新增一个 Dict 类型的参数
                            info: Dict[str, Any]):
    return {"q": q, "skip": skip, "limit": limit, "info": info}


# 3、编写路径操作函数,参数声明为 Depends
@app.get("/items")
async def read_items(commons: Dict[str, Any] = Depends(common_parameters)):
    return commons


if __name__ == "__main__":
    uvicorn.run(app="25_dependency:app", host="127.0.0.1", port=8080, reload=True, debug=True)

 

查看 Swagger API 文档

 

正确传参的请求结果

 

标签:依赖,FastAPI,29,Depends,Dependencies,limit,skip,async
来源: https://www.cnblogs.com/xiao-xue-di/p/15766437.html