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

c 网站开发上海网站建设专家

c 网站开发,上海网站建设专家,网页广告关不掉怎么办,网站免费建站的方法在构建现代Web应用时,代码的模块化和复用性至关重要。FastAPI内置了强大的依赖注入(Dependency Injection,简称DI)系统,帮助开发者轻松管理和复用复杂的逻辑、参数和服务,如数据库连接、认证、配置等。本文…

在构建现代Web应用时,代码的模块化和复用性至关重要。FastAPI内置了强大的依赖注入(Dependency Injection,简称DI)系统,帮助开发者轻松管理和复用复杂的逻辑、参数和服务,如数据库连接、认证、配置等。本文将详细介绍FastAPI依赖注入的原理、使用方法,并通过代码示例帮助你快速掌握。

什么是依赖注入?

依赖注入是一种设计模式,通过将组件所依赖的对象(依赖项)由外部传入,而不是在组件内部自行创建,从而实现代码解耦和复用。在FastAPI中,依赖注入允许我们声明路径操作函数所需的依赖,FastAPI会自动执行依赖逻辑并将结果注入到函数参数中。

FastAPI依赖注入的基本用法

1. 定义依赖项函数

依赖项通常是一个普通函数(可以是异步的),它执行某些逻辑并返回需要注入的值。例如,一个处理查询参数的依赖项:

from typing import Union
from fastapi import Depends, FastAPIapp = FastAPI()async def common_parameters(q: Union[str, None] = None, skip: int = 0, limit: int = 100
):return {"q": q, "skip": skip, "limit": limit}

2. 在路径操作函数中声明依赖

通过Depends将依赖函数注入到路径操作函数的参数中:

@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

当请求/items//users/时,FastAPI会先调用common_parameters函数,获取返回值并赋给commons参数,然后执行路径操作函数。

依赖注入的工作流程

  • FastAPI识别路径操作函数参数中使用的Depends
  • 自动调用依赖函数,传入请求中的参数(如查询参数)。
  • 获取依赖函数的返回值,并注入到路径操作函数对应参数。
  • 执行路径操作函数,返回响应。

依赖注入的高级用法

1. 类作为依赖项

依赖项不仅限于函数,也可以是类。FastAPI会实例化该类并注入:

from fastapi import Depends, FastAPIapp = FastAPI()class CommonQueryParams:def __init__(self, q: str = None, skip: int = 0, limit: int = 100):self.q = qself.skip = skipself.limit = limit@app.get("/items/")
async def read_items(commons: CommonQueryParams = Depends(CommonQueryParams)):return {"q": commons.q, "skip": commons.skip, "limit": commons.limit}

这种方式适合依赖项需要维护状态或多个方法的场景。

2. 依赖项嵌套(子依赖)

依赖项函数可以依赖其他依赖项,实现复杂逻辑拆分。例如:

from fastapi import Dependsasync def get_token_header(token: str = Depends(oauth2_scheme)):# 验证token逻辑return tokenasync def get_current_user(token: str = Depends(get_token_header)):# 根据token获取用户return user

3. 依赖项的生命周期管理

依赖函数可以用yield关键字实现上下文管理,完成资源的初始化和清理,如数据库连接:

from fastapi import Dependsasync def get_db():db = create_db_session()try:yield dbfinally:db.close()@app.get("/items/")
async def read_items(db = Depends(get_db)):items = db.query(...)return items

依赖注入的优势

  • 代码复用:将通用逻辑封装为依赖项,多个路径操作函数共享。
  • 解耦合:路径操作函数无需关心依赖的创建细节。
  • 自动验证:依赖项参数支持类型注解,FastAPI自动校验请求参数。
  • 灵活性:支持同步和异步依赖,类和函数均可作为依赖。
  • 集成方便:轻松集成数据库连接、认证、配置等服务。

完整示例代码

from typing import Union
from fastapi import Depends, FastAPIapp = FastAPI()# 依赖项函数,处理查询参数
async def common_parameters(q: Union[str, None] = None, skip: int = 0, limit: int = 100
):return {"q": q, "skip": skip, "limit": limit}# 路径操作函数,注入依赖
@app.get("/items/")
async def read_items(commons: dict = Depends(common_parameters)):return commons# 类作为依赖项示例
class CommonQueryParams:def __init__(self, q: Union[str, None] = None, skip: int = 0, limit: int = 100):self.q = qself.skip = skipself.limit = limit@app.get("/users/")
async def read_users(commons: CommonQueryParams = Depends(CommonQueryParams)):return {"q": commons.q, "skip": commons.skip, "limit": commons.limit}

运行后访问/items//users/,可以通过查询参数传入qskiplimit,FastAPI会自动调用依赖项并注入参数。

通过上述介绍和示例,你可以看到FastAPI的依赖注入系统设计简洁且功能强大,能够帮助你构建模块化、易维护的高性能API应用。掌握依赖注入,是提升FastAPI开发效率和代码质量的重要一步。


文章转载自:

http://TQjnYMLC.zkbxx.cn
http://gP4TOIpJ.zkbxx.cn
http://AZfaQbCp.zkbxx.cn
http://0Hr9XcDL.zkbxx.cn
http://LGpPPudF.zkbxx.cn
http://jH1gD7Bi.zkbxx.cn
http://sIecsvsF.zkbxx.cn
http://x8N9n34O.zkbxx.cn
http://rsW3eJZy.zkbxx.cn
http://KNDWBi4z.zkbxx.cn
http://0yaclPHo.zkbxx.cn
http://tfvrhY5I.zkbxx.cn
http://lzlVd5w4.zkbxx.cn
http://MM3WCcfb.zkbxx.cn
http://c9QL0rrx.zkbxx.cn
http://s3Bi3kjI.zkbxx.cn
http://gCJ8xm5e.zkbxx.cn
http://G3Vq1U12.zkbxx.cn
http://gZmhJM6F.zkbxx.cn
http://S3FWWnVM.zkbxx.cn
http://inpbuTZ3.zkbxx.cn
http://z4YVaKn3.zkbxx.cn
http://REPTszM8.zkbxx.cn
http://We0zz4jY.zkbxx.cn
http://46CMxlUA.zkbxx.cn
http://eOeKaf5X.zkbxx.cn
http://6tM87tUv.zkbxx.cn
http://yU0sDEPY.zkbxx.cn
http://Y6SAT8Fu.zkbxx.cn
http://NyHIAT21.zkbxx.cn
http://www.dtcms.com/wzjs/706567.html

相关文章:

  • vps 网站上传前端做用vue做后台多还是做网站多
  • 报名系统网站开发怎么免费给网站做收录
  • 商务网站建设毕业设计模板网站开发项目视频教程
  • 如何建网站运营网站网推获客平台
  • 网站设计公司网站专业高端网站建设专家评价
  • 东莞企业网站推广技巧阳光创信-网站建设首选品牌
  • 西宁做网站治愈君博i衡水wap网站建设价格
  • 建设银行报网站设计素材下载网站
  • 怎么用凡科做网站wordpress4.7.10漏洞
  • 大连市网站推广公司优秀网站案列
  • 网站收录低的原因设计图制作软件app手机
  • 网站工程工资一般多少钱数据分析培训课程
  • 网站内页如何做排名深圳光明网站建设
  • 兰州建设网站汉中建设工程招投标信息网
  • 初中生如何做网站wordpress插件删除失败
  • 网站模板下载好之后如何安装wordpress keywords description
  • 网站做404好处流量套餐网站
  • 淘宝客 网站建设不完整什么是网站名
  • wordpress建站哪里好wordpress 后台破解
  • 网站建设费与无形资产雪樱wordpress主题
  • 瓯海住房与城乡建设局网站建设银行国际互联网网站是什么
  • 响应式网站 英文php网站模版
  • 南通旅游网站建设同行抄袭公司网站
  • 网站团队的建设网站建设情况通报
  • 网站开发流程中客户的任务是什么wordpress 首页调用tag
  • 网站怎么添加横幅wordpress后台html
  • 金华网站建设价格wordpress去掉评论框
  • 国外网站服务器免费如何创建网站 优帮云
  • 一个简单的动态页面网站需要数据库吗什么是网站框架结构
  • 东莞企业公司网站建设主流建站公司