问题标签 [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.
python - 如何将参数传递给 FastAPI 中间件并影响其处理逻辑?
我们知道,通过request.state
我们可以将一些自定义数据从中间件的前处理过程传递给处理程序,从而影响其行为,我目前想知道处理程序如何影响中间件之后的逻辑。
我的具体业务场景是我有一个路由地址(我们/api
举个例子),它的作用是计算一个动态的结果,会消耗比较长的时间,返回比较大的json响应。操作上,提高效率的有效方法是使用一些缓冲区(如redis)来缓存其结果,这样每次缓存命中时都可以节省计算时间。
由于我的内存有限,我想将 gzip 压缩的字节存储在缓冲区而不是原始 json 流中,这将大大增加我可以处理的缓存量。具体来说,由于响应中的数量较多numbers
,一个响应内容在没有gzip的情况下通常为20MB左右,而压缩后只有1MB左右。这意味着在 1GB 内存的情况下,我只能缓存 50 个不同的响应而不进行压缩,而使用压缩我可以缓存 1000 个,这是一个不容忽视的显着差异。
由于这些需求,我想实现一个功能齐全的 gzip 中间件,但是有几个技术上的困惑。首先是我想控制中间件是否压缩,显然,如果响应没有命中缓存而是动态生成的,那么它应该被压缩,但相反,它不应该再次被压缩,因为它有已经压缩过一次。第二个问题是,即使我可以控制中间件不压缩,在不需要运行压缩逻辑的情况下,如何将其结果替换为已经压缩的字节?
由于我还不知道如何实现,请原谅我只能提供一些伪代码来说明我的想法。
下面的代码描述了一个相对复杂的响应地址,不包含中间件:
添加中间件后,我想实现以下目标:
谢谢!
python - 在pytest的starlette应用程序中模拟特定功能?
在一个函数中实现了一个邀请验证系统。我想用 pytest 来模拟它。这是conftest.py
我想修改该应用程序中的特定功能以绕过电子邮件验证。
python - FastAPI 重定向给出了不允许的方法错误
我创建了一个登录路径,在其中发布我的表单数据并设置一个 cookie。设置 cookie 后,我重定向到“/main”{detail:"Method Not Allowed"}
作为响应。
我进一步检查了控制台,发现在重定向期间向“/main”发出了 POST 请求,因此导致了错误。当我将其更改为它时,app.post("/main")
它工作正常。如何避免此错误?我不想每次都发布访问“/main”的请求。提前致谢。
python - 如何在 FastAPI 中更新请求参数
我正在使用FastAPI,我想定义一个中间件,在其中可以截取前端传递的加密参数并解密,并将原始参数替换为解密后的参数,我该怎么办?我努力了
我也试过
但是还是没有解决,哪位大神能解答一下,万分感谢!
==================================================== ========================
这个方法我也试过了,还是不行!</p>
==================================================== =============
我已经解决了这个问题app.router.route_class = GzipRoute
,
主要提示:在另一个类中定义路由时,您还需要创建一个路由类,例如:
python - 从 ApiRouter 引发异常不会运行异常处理程序,而是返回 500 内部服务器错误。快速 API
我正在使用添加到快速 API 的 API 路由器在快速 API 中引发自定义异常。我正在定义异常类和处理程序,并使用以下代码添加它们。它以前可以工作,现在我不太确定是什么问题。添加了中间件,所以也许这就是问题所在?
我正在像这样定义异常和处理程序
python - 关于 FastAPI 中的最大递归错误
我正在使用 FastAPI+Sqlalchemy+Mysql 构建应用程序,当我进行压力测试时,出现 Asgi 异常错误:
我绝对可以拥有:
- 我没有调用任何递归函数
- 我已经尝试过 alchemy 和 mysql_connector 来查询数据库,但错误仍然存在。
代码在这里:
我的 main.py 如下
安全.py
会话.py
api.py
/v1/getCompany
当我连续调用这个接口时,我得到了上面的错误
相关的问题我都查过了,可惜没有找到答案,现在只能怀疑是FastAPI或者Starlette的问题,谁能给我解决问题,非常感谢。
经过测试,我可以这样解决这个问题:sys.setrecursionlimit(9000000)
,但我认为这不应该是这种问题的最佳解决方案
python - 如何使用所有必要的目录创建我的第一个 python startlette 项目?
我必须研究一个用python的ASGI框架Starlette编写的现有项目。虽然我了解 routs 和 handlers 是如何工作的,但我不太清楚项目的目录结构是如何生成的。在线文档很少谈论这方面。是否有生成此目录结构的命令?以下是示例目录结构。
python - 如何将对象从 Uvicorn 服务器传递到 App 实例
我想将在 Uvicorn 服务器启动期间创建的对象传递给由该 uvicorn 实例(FastApi/Starlette)运行的应用程序。一开始,我准备了继承Uvicorn服务器的类:
然后我以编程方式启动服务器:
我的应用程序类也继承自 FastApi:
但我不知道如何将管道实例从 Uvicorn 传递到应用程序。在 Uvicorn 实例中,我尝试制作如下内容:
但是在init ()、run() 或 serve() 方法中,loaded_app 仍然不存在。这里方法执行的顺序:
加载应用程序时,Uvicorn 内部是否会引发任何事件?或者也许 App 可以访问它正在运行的服务器实例?我无法在文档中找到此信息。
python - Starlette JSONResponse 到 Pydantic parse_obj_as
使用 fastapi 并拥有一个返回创建的 JSONResponse 的函数。我的目标是创建自定义的 200 响应并将其放入 Pydanticparse_obj_as
中并带有预期的 BaseModel。
有没有办法取回 JSONResponse 数据?或者有什么解决办法?谢谢!
基本型号:
python - 在 FastAPI 中获取查询参数作为字典
我上个月学习了 Flask,现在正在学习 Pyramid 和 FastAPI。我的应用程序的要求之一是获取字典中的所有查询参数(有多种组合,我可以假设所有键都是唯一的并且具有单个值)
在 Flask 中,对于像GET /?foo=1&bar=2这样的请求,我可以从这样的字典中获取 foo 和 bar 参数:
我无法弄清楚如何在 FastAPI / Starlette 中轻松地做同样的事情。我想出的最佳解决方案是通过拆分 request.query_params 手动构建字典:
似乎应该有更简单的方法?