问题标签 [starlette]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
724 浏览

python - 如何将参数传递给 FastAPI 中间件并影响其处理逻辑?

我们知道,通过request.state我们可以将一些自定义数据从中间件的前处理过程传递给处理程序,从而影响其行为,我目前想知道处理程序如何影响中间件之后的逻辑。

我的具体业务场景是我有一个路由地址(我们/api举个例子),它的作用是计算一个动态的结果,会消耗比较长的时间,返回比较大的json响应。操作上,提高效率的有效方法是使用一些缓冲区(如redis)来缓存其结果,这样每次缓存命中时都可以节省计算时间。

由于我的内存有限,我想将 gzip 压缩的字节存储在缓冲区而不是原始 json 流中,这将大大增加我可以处理的缓存量。具体来说,由于响应中的数量较多numbers,一个响应内容在没有gzip的情况下通常为20MB左右,而压缩后只有1MB左右。这意味着在 1GB 内存的情况下,我只能缓存 50 个不同的响应而不进行压缩,而使用压缩我可以缓存 1000 个,这是一个不容忽视的显着差异。

由于这些需求,我想实现一个功能齐全的 gzip 中间件,但是有几个技术上的困惑。首先是我想控制中间件是否压缩,显然,如果响应没有命中缓存而是动态生成的,那么它应该被压缩,但相反,它不应该再次被压缩,因为它有已经压缩过一次。第二个问题是,即使我可以控制中间件不压缩,在不需要运行压缩逻辑的情况下,如何将其结果替换为已经压缩的字节?

由于我还不知道如何实现,请原谅我只能提供一些伪代码来说明我的想法。

下面的代码描述了一个相对复杂的响应地址,不包含中间件:

添加中间件后,我想实现以下目标:

谢谢!

0 投票
0 回答
112 浏览

python - 在pytest的starlette应用程序中模拟特定功能?

在一个函数中实现了一个邀请验证系统。我想用 pytest 来模拟它。这是conftest.py

我想修改该应用程序中的特定功能以绕过电子邮件验证。

0 投票
1 回答
1208 浏览

python - FastAPI 重定向给出了不允许的方法错误

我创建了一个登录路径,在其中发布我的表单数据并设置一个 cookie。设置 cookie 后,我重定向到“/main”{detail:"Method Not Allowed"}作为响应。

我进一步检查了控制台,发现在重定向期间向“/main”发出了 POST 请求,因此导致了错误。当我将其更改为它时,app.post("/main")它工作正常。如何避免此错误?我不想每次都发布访问“/main”的请求。提前致谢。

0 投票
0 回答
345 浏览

python - 如何在 FastAPI 中更新请求参数

我正在使用FastAPI,我想定义一个中间件,在其中可以截取前端传递的加密参数并解密,并将原始参数替换为解密后的参数,我该怎么办?我努力了

我也试过

但是还是没有解决,哪位大神能解答一下,万分感谢!

==================================================== ========================

这个方法我也试过了,还是不行!</p>

==================================================== =============

我已经解决了这个问题app.router.route_class = GzipRoute主要提示:在另一个类中定义路由时,您还需要创建一个路由类,例如:

0 投票
1 回答
611 浏览

python - 从 ApiRouter 引发异常不会运行异常处理程序,而是返回 500 内部服务器错误。快速 API

我正在使用添加到快速 API 的 API 路由器在快速 API 中引发自定义异常。我正在定义异常类和处理程序,并使用以下代码添加它们。它以前可以工作,现在我不太确定是什么问题。添加了中间件,所以也许这就是问题所在?

我正在像这样定义异常和处理程序

0 投票
1 回答
782 浏览

python - 关于 FastAPI 中的最大递归错误

我正在使用 FastAPI+Sqlalchemy+Mysql 构建应用程序,当我进行压力测试时,出现 Asgi 异常错误:

我绝对可以拥有:

  1. 我没有调用任何递归函数
  2. 我已经尝试过 alchemy 和 mysql_connector 来查询数据库,但错误仍然存​​在。

代码在这里:

我的 main.py 如下

安全.py

会话.py

api.py

/v1/getCompany当我连续调用这个接口时,我得到了上面的错误

相关的问题我都查过了,可惜没有找到答案,现在只能怀疑是FastAPI或者Starlette的问题,谁能给我解决问题,非常感谢。

经过测试,我可以这样解决这个问题:sys.setrecursionlimit(9000000),但我认为这不应该是这种问题的最佳解决方案

0 投票
0 回答
28 浏览

python - 如何使用所有必要的目录创建我的第一个 python startlette 项目?

我必须研究一个用python的ASGI框架Starlette编写的现有项目。虽然我了解 routs 和 handlers 是如何工作的,但我不太清楚项目的目录结构是如何生成的。在线文档很少谈论这方面。是否有生成此目录结构的命令?以下是示例目录结构。

0 投票
0 回答
150 浏览

python - 如何将对象从 Uvicorn 服务器传递到 App 实例

我想将在 Uvicorn 服务器启动期间创建的对象传递给由该 uvicorn 实例(FastApi/Starlette)运行的应用程序。一开始,我准备了继承Uvicorn服务器的类:

然后我以编程方式启动服务器:

我的应用程序类也继承自 FastApi:

但我不知道如何将管道实例从 Uvicorn 传递到应用程序。在 Uvicorn 实例中,我尝试制作如下内容:

但是在init ()、run() 或 serve() 方法中,loaded_app 仍然不存在。这里方法执行的顺序:

加载应用程序时,Uvicorn 内部是否会引发任何事件?或者也许 App 可以访问它正在运行的服务器实例?我无法在文档中找到此信息。

0 投票
1 回答
525 浏览

python - Starlette JSONResponse 到 Pydantic parse_obj_as

使用 fastapi 并拥有一个返回创建的 JSONResponse 的函数。我的目标是创建自定义的 200 响应并将其放入 Pydanticparse_obj_as中并带有预期的 BaseModel。

有没有办法取回 JSONResponse 数据?或者有什么解决办法?谢谢!

基本型号:

0 投票
1 回答
2983 浏览

python - 在 FastAPI 中获取查询参数作为字典

我上个月学习了 Flask,现在正在学习 Pyramid 和 FastAPI。我的应用程序的要求之一是获取字典中的所有查询参数(有多种组合,我可以假设所有键都是唯一的并且具有单个值)

在 Flask 中,对于像GET /?foo=1&bar=2这样的请求,我可以从这样的字典中获取 foo 和 bar 参数:

我无法弄清楚如何在 FastAPI / Starlette 中轻松地做同样的事情。我想出的最佳解决方案是通过拆分 request.query_params 手动构建字典:

似乎应该有更简单的方法?