当前位置: 首页 > news >正文

FastAPI - 依赖注入3

在FastAPI中,依赖注入是一种强大的功能,它允许你轻松地将依赖项注入到你的路由处理程序函数中,以处理不同的任务,例如数据库访问、认证和配置管理。

FastAPI支持依赖注入通过以下方式:

  1. 使用参数注解: 你可以在路由处理程序函数的参数上使用Python的类型注解,告诉FastAPI你需要什么依赖项。FastAPI将根据类型自动查找或创建这些依赖项。
  2. 依赖注入容器: FastAPI内部使用一个依赖注入容器来管理依赖项。这个容器会在运行时解析参数注解,自动处理依赖项的创建和生命周期管理。

https://zhuanlan.zhihu.com/p/658917476

https://fastapi.tiangolo.com/zh/tutorial/dependencies

型应用程序依赖项管理

具体的依赖项为可调用类型(callable),如函数(function),类(class)

在项目根目录下创建dependencies.py文件用于管理依赖项

# -*- coding:utf-8 –*-
from typing import Annotatedfrom fastapi import Header, HTTPExceptionasync def get_query_token(token: str = ""):if token != "vvv":raise HTTPException(status_code=400, detail="No vvv token provided")

修改routers/member.py文件

# -*- coding:utf-8 –*-
from fastapi import Depends,APIRouterfrom dependencies import get_query_tokenrouter = APIRouter(prefix="/member",tags=["会员模块"],dependencies=[Depends(get_query_token)],)@router.get("/list",description="会员列表")
async def list():return {"message":"成功获取会员列表"}@router.post("/login",description="会员登录")
async def login():return {"message": "member login"}

上面的依赖项要求我们请求时必须带上参数token,并且其值为vvv

浏览器打开http://127.0.0.1:8000/member/list?token=vvv

当然也可以在main.py里面执行依赖项

先在dependencies.py里面增加另外一个依赖项

async def another_depend(token2: str = ""):if token2 != "vvv2":raise HTTPException(status_code=400, detail="No vvv2 token provided")

修改main.py文件

# -*- coding:utf-8 –*-
from fastapi import Depends,FastAPIfrom dependencies import another_depend
from routers import memberapp = FastAPI(title="文档标题",description="关于API文档的补充说明",version="1.0.0",docs_url="/docs",dependencies=[Depends(another_depend)],
)app.include_router(member.router)

浏览器打开http://127.0.0.1:8000/member/list?token=vvv&token2=vvv2

http://www.lryc.cn/news/358126.html

相关文章:

  • 【网络运维的重要性】
  • YOLOv5改进 | 注意力机制 | 添加双重注意力机制 DoubleAttention【附代码/涨点能手】
  • 自用网站合集
  • 【Golang】gin框架如何在中间件中捕获响应并修改后返回
  • 电脑同时配置两个版本mysql数据库常见问题
  • Java | Leetcode Java题解之第112题路径总和
  • HaloDB 的 Oracle 兼容模式
  • 【Python】解决Python报错:TypeError: ‘xxx‘ object does not support item assignment
  • Spring-注解
  • 旧手机翻身成为办公利器——PalmDock的介绍也使用
  • 期货交易的雷区
  • 东方通TongWeb结合Spring-Boot使用
  • 6.S081的Lab学习——Lab5: xv6 lazy page allocation
  • 在WHM中如何调整max_post_size参数大小
  • 智能监控技术助力山林生态养鸡:打造智慧安全的养殖新模式
  • 那些不起眼但很好玩的API合辑
  • java —— 克隆对象、枚举
  • STM32-GPIO八种输入输出模式
  • windows镜像虚拟机创建共享文件夹详细步骤 -- 和本地电脑传输文件
  • 通关!游戏设计之道Day18
  • 写Python时不用import,你会遭遇什么
  • java网络:过滤器修改请求头
  • yolov10 快速使用及训练
  • CSS变量 -- var() 使用教程
  • python基础-数据结构-leetcode刷题必看-queue---队列-python的底层构建
  • 深入理解Spring Security:保护你的Web应用程序
  • 【车载开发系列】Vector工具链的安装
  • Windows系统部署YOLOv5 v6.1版本的训练与推理环境保姆级教程
  • [RK3588-Android12] 关于EDP屏外设为Panel,不支持HPD的配置
  • 142.栈和队列:用栈实现队列(力扣)