如何指定整个路由器的依赖关系?

2023-11-29

class User(BaseModel):
    name: str
    token: str

fake_db = [
    User(name='foo', token='a1'),
    User(name='bar', token='a2')
]

async def get_user_by_token(token: str = Header()):
    for user in fake_db:
        if user.token == token:
            return user
        else:
            raise HTTPException(status_code=401, detail='Invalid token')


@router.get(path='/test_a', summary='Test route A')
async def test_route_a(user: User = Depends(get_user_by_token)):
    return {'name': user.name}


@router.get(path='/test_b', summary='Test route B')
async def test_route_a(user: User = Depends(get_user_by_token)):
    return {'name': user.name}

我想避免代码重复。是否可以以某种方式设置线路user: User = Depends(get_user_by_token)对于整个路由器?同时,我需要user对象在每个方法中可用。

It is very important that the openapi says that you need to specify a header with a token for the method.
enter image description here


您可以使用dependencies要添加的参数全局依赖创建时router实例:

router = APIRouter(dependencies=[Depends(get_user_by_token)])

或者,当添加router to the app实例:

app.include_router(router, dependencies=[Depends(get_user_by_token)])

请查看 FastAPI 的文档依赖关系更多细节。

至于获取全局依赖的返回值,你实际上不能这样做。解决这个问题的方法是将返回值存储到request.state(如所描述的here),用于存储任意状态(参见实现State以及)。因此,你可以有这样的东西:

def get_user_by_token(request: Request, token: str = Header()):
    for user in fake_db:
        if user.token == token:
            request.state.user = user
    # ...

然后,在端点内部,您可以使用以下命令检索用户对象request.state.user,如中所述这个答案.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何指定整个路由器的依赖关系? 的相关文章

  • 在查找表中查找字符串值以填充第二个数据帧

    我有两个数据框 main df header 1 0 value 1 1 value 2 2 value 3 3 value 1 和一个查找数据框lookup df header 1 header 2 0 value 1 lookup va
  • 如何检查给定名称的变量是否是非本地变量?

    给定一个堆栈帧和一个变量名 我如何判断该变量是否是非局部的 例子 import inspect def is nonlocal frame varname How do I implement this return varname not
  • 尝试在Python3.6中实现`signal.CTRL_C_EVENT`

    我正在阅读有关信号的内容并尝试实施signal CTRL C EVENT 据我了解 如果用户在程序运行时按 CTRC C 将发送一个信号来终止程序 我可以将程序指定为参数吗 我尝试测试用法 import sys import signal
  • 在 python3 中以字节形式访问命令行参数[重复]

    这个问题在这里已经有答案了 是否可以访问原始 argv 元素二进制内容 python3 c import sys print sys argv echo ne xff x80 x00 xff c udcff udc80 udcff 您可以按
  • 需要FTP文件而不存储解释器文件通过Python保存在本地

    我正在尝试做一些图像解释器并尝试将它们直接存储到 FTP 服务器 但我的步骤是从本地文件夹上传图像 然后将其转换为蒙版图像 然后它将获得最终输出 但是在我的蒙版和最终输出场景中 临时图像被保存在本地 这是我不想要的 但如果不将图像存储在本地
  • 将大型 Twitter JSON 数据 (7GB+) 加载到 Python 中

    我已经通过 AWS 设置了一个公共流来收集推文 现在想做一些初步分析 我的所有数据都存储在 S3 存储桶中 5mb 文件 我下载了所有内容并将所有文件合并为一个 每条推文都按照 Twitter 规范存储为标准 JSON 对象 基本上 合并的
  • Pygame 中可以改变精灵颜色吗?

    我正在使用 Pygame 在 Python 中制作一个游戏 其中在游戏开始前包括一个小型头像制作器 但不是创建一个包含 88 种不同发型和颜色组合的大精灵表 有没有一种方法可以让我只使用通用的 每个发型的 png 图像并在游戏中为其应用颜色
  • 动态添加字段到数据类对象

    我正在编写一个库来访问 REST API 它返回带有用户对象的 json 我将其转换为 dict 然后将其转换为数据类对象 问题是并非所有字段都是固定的 我想动态添加其他字段 未在我的数据类中指定 我可以简单地为我的对象分配值 但它们不会出
  • Python3.5 BeautifulSoup4从div中的'p'获取文本

    我试图从 div 类 caselawcontent searchable content 中提取所有文本 此代码仅打印 HTML 不打印网页中的文本 我缺少什么来获取文本 以下链接位于 finteredcasesdoc text 文件中 h
  • python sqlite3从excel创建数据库

    我正在尝试从 Excel 电子表格创建数据库 我有下面的代码 问题是当我运行代码时 我的数据库为每列创建一个表 我想为工作簿中列出的每个电子表格创建一个表格 工作表名称为工作表 1 和工作表 2 import sqlite3 import
  • 编程式 Google 登录/注销用户 1,然后登录用户 2 (Python)

    我正在开展一个 DIY 项目 为我的家庭中的多个成员检索 Google 位置历史记录 根据 StackOverflow 成员的指示 t m 亚当 https stackoverflow com users 7811673 t m adam
  • 列表值意外变化[重复]

    这个问题在这里已经有答案了 为什么是这个列表r即使我只是想更改列表 也会被更改v 即使它们不指向相同的内存位置 r v list r 2 2 1 2 8 3 10 2 1 8 4 2 4 6 4 for c a in enumerate r
  • 如何在一段时间后停止执行?

    我想在一定时间后停止执行 Dash 程序 当我关闭浏览器窗口时效果更好 尽管我怀疑这是否可能 有没有办法通过python中断它 我已经尝试过放一个 sys exit 打电话后app run server 虽然据我了解app run serv
  • 如何使用 win32com.client api 访问 MS Word 的脚注

    我正在尝试使用 win32com client api 访问 MS Word 文件的脚注 我已经用谷歌搜索过 但没能找到合适的方法 我使用 python docx 来实现上述目的 但我发现当前版本的 python docx 无法访问 MS
  • 查找两个复杂字典之间的集合差异

    我有两个结构如下的字典 a dict1 a 1 2 3 4 b 1 2 5 6 b dict2 a 1 2 5 6 b 1 2 7 8 我需要找到字典中每个键之间的设置差异 即 dict1 a dict2 a 应该返回 3 4 任何想法都值
  • 互补DNA序列

    我在编写这个循环时遇到问题 它似乎在第二个序列之后停止了 我想返回给定 DNA 序列的互补 DNA 序列 例如 AGATTC gt TCTAAG 其中 A T 和 C G def get complementary sequence dna
  • 如何将 AWS Kinesis Video Stream GetMedia API 输出解码为 mp3/wav?

    我现在使用 GetMedia API 通过 AWS Connect 服务将数据提取到 Kinesis Video Stream KVS 我能够提取Payload但如何将此输出转换为 mp3 wav 我想将此输出提取到 AWS Transcr
  • 如何在离线绘图中绘制垂直线?

    如何使用 python 以离线方式绘制一条垂直线 我想在 x 20 x 40 和 x 60 处添加线条 所有线条都在同一个图中 def graph contracts self trace1 go Scatter x np array ra
  • 如何只获取父类对象的属性

    我有两节课 class Parent object def init self id name self id id self name name self parent vars id name make a copy def print
  • 表达式中的 Python 'in' 关键字与 for 循环中的比较 [重复]

    这个问题在这里已经有答案了 我明白什么是in运算符在此代码中执行的操作 some list 1 2 3 4 5 print 2 in some list 我也明白i将采用此代码中列表的每个值 for i in 1 2 3 4 5 print

随机推荐

  • Javascript 在页面上查找文本

    我需要在类似于以下内容的 HTML 上运行搜索和替换 我需要有 查找下一个 替换 和 全部替换 选项 诀窍是我需要运行 AJAX 请求替换值后 更新数据库中每个字段的值 我遇到的唯一麻烦是我不确定如何搜索内容 sheet并将这些值替换为用户
  • 使用 PHP 强制下载文件

    我的服务器上有一个 CSV 文件 如果用户单击链接 它应该下载 但它会在我的浏览器窗口中打开 我的代码如下所示 a href files csv example example csv Click here to download an e
  • 如何触发mapView:didSelectAnnotationView

    我是 iPhone 开发新手 我一直在阅读有关如何使谷歌地图注释标注窗口接受换行符的几个问题 我读过的每个教程都要求我启动mapView didSelectAnnotationView方法 但我不知道如何触发这个 我尝试过的事情包括 将方法
  • JUNG:按顺序放置树节点

    将节点添加到我的DelegateTree 它们在视觉上并不按照我添加它们的顺序出现 我一直在寻找解决方案 但还没有找到任何东西 有谁知道如何改变这个吗 提前致谢 EDIT 我的代码 Generate a visualization of t
  • 如何使文字环绕图像?

    我正在设计一个博客 我正在使用 CarrierWave 和 MiniMagic 进行图像文件上传 截至目前 每篇文章的顶部都会显示一张图片 我首先尝试将图片大小调整为矩形 但似乎即使我在调整大小下更改尺寸 图片也始终显示为正方形 现在 我正
  • 使用 EclipseLink 和 Hibernate (JPA2.1) 生成架构 - @ForeignKey 被忽略

    我正在测试 JPA2 1 和新的 模式生成 功能 为此 我在 HyperSQL 数据库下测试了两种实现 EclipseLink 2 5 2 M1 是参考实现 休眠4 3 我对实现没有任何偏好 甚至对性能也没有偏好 我测试了 EclipseL
  • Tomcat 7 更新后继续使用旧的 jsp

    我们 我公司的人员 不久前为 Tomcat 创建了一个应用程序 它使用 servlet 和 jsp 作为 GUI 我们刚刚完成了一次更新 其中一个 jsp 发生了很大的变化 但是 当我们在一台计算机上替换 war 文件时 它会继续使用旧的
  • 在 Magento 1.6.2 中登录/注销时如何从 top.links 中删除链接

    我进行了很好的搜索并找到了customer logged in and customer logged out标签 但我无法让它们正常工作 我确信这是我对它们的误解 我的目标是隐藏区块中的登录 帐户和结账链接top links当用户处于no
  • R(https) 中 getSymbols 函数使用错误 [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 目前不接受答案 Running library quantmod getSymbols BSESN src yahoo 产生以下错误消息 Error in download file pas
  • 通过cmd上传和更新谷歌驱动器中的文件[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 是否有任何脚本可以让 Google Drive 每天自动上传 转换和更新 csv 文件 我按照 Google 站点上的 JDBC 上的脚本进行操作
  • 为什么 Stream Parallel() 不使用所有可用线程?

    我尝试跑100Sleep使用 Java8 1 8 0 172 Stream parallel 并行任务在自定义 ForkJoinPool 内提交 有 100 多个可用线程 每个任务都会sleep1秒 鉴于 100 个睡眠可以并行完成 我预计
  • HTML 选择。 Select2 + ng-click = 不起作用?

    我在用AngularJS and Select2创建一个漂亮的下拉菜单 我已经包括了ng click在 选择标签的 选项标签中 但是 ng click 在处于Select2
  • 了解 Dart 1.11 的新appendHTML清理

    我刚刚升级到 Dart 1 11 我不太明白发生了什么 appendHTML 我有一个非常大的项目 使用 dart 和 appendHTML 经常使用 我已经在这个应用程序上工作了一年多了 但现在没有任何效果了 我的控制台看起来像这样 Re
  • BUG:IIS7 托管请求

    我不知道是否也应该将这个问题发布到 ServerFault 因为它是关于 IIS 配置的 在 IIS7 中 我们可以通过以下方式告诉模块运行托管内容 从而加快静态内容服务
  • 在 Microsoft Access 2010 表单和报告中显示多个附件

    最初 我很高兴在 Access 2010 中发现附件字段 这个功能在美学上让我内心的数据库纯粹主义者感到厌烦 但我内心的懒惰在这里负责 从表面上看 它确实看起来可以使一个我当前的项目更容易 更简单 令人高兴的是 它会在表单和报告上自动显示图
  • Objective-C:如何找到数组中最常见的字符串?

    我有一个来自在线数据库的字符串数组 我试图确定最常用的单词 数组内的值会有所不同 但我想检查我正在使用的任何集合或单词中最常见的单词 如果理论上我有以下数组 NSArray stringArray NSArray arrayWithObje
  • 防止执行“继承的”信号处理程序

    当许多派生组件频繁使用该功能时 在 基本 组件中定义信号处理程序非常漂亮 但是 在 QML 中 在派生组件中安装新的处理程序does not替换原来的处理程序 它只是堆叠在它的上面 由于处理程序对于每个信号来说并不是唯一的 它们只是连接 并
  • SQLCLR 程序集部署失败,因为程序集验证失败

    万一其他人遇到这个问题 错误 SQL72014 Net SqlClient 数据提供程序 创建程序集 程序集 Assembly Name 失败 因为程序集 Assembly Name 验证失败 检查引用的程序集是否是最新的 并受信任 对于
  • 设置会话文化

    我的应用程序的每个用户都会选择他们的国家 地区 然后将其存储在 cookie 中并存储以供以后请求 一切正常 但我需要在会话开始时设置文化 我目前正在尝试将 web config 中的区域性设置为 en GB 然后使用 Global asa
  • 如何指定整个路由器的依赖关系?

    class User BaseModel name str token str fake db User name foo token a1 User name bar token a2 async def get user by toke