问题标签 [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 - 在 python-fastApi 中间件中引发异常
我正在尝试在 fastapi 中间件中验证令牌,但这似乎是不可能的。正如我在想中间件需要进行下一次调用,尽管它不是必需的。我无法在这个 python-fastapi 后端找到任何好的解决方案来一次性处理令牌。任何帮助表示赞赏。
python - 使用 Starlette 和 Uvicorn 进行 Python 日志记录时,文件句柄过多(在 lsof 上)
我有一个通过 uvicorn 运行的最小的 starlette 应用程序,除了返回一个 ping 之外什么都不做。奇怪的是,即使只有一个线程,我的日志文件也有 45 个文件句柄。句柄随着应用程序的命中而增加,并在 45 处保持稳定。我正在使用 lsof 计算文件句柄:
当然,这是一个最小的再生产。实际上,我的整个应用程序正在生成数千个文件句柄。一些(~200)我希望给定线程*控制器模块。但是,我无法解释创建数千个文件句柄的位置。在我的真实程序中,它们也不会停滞不前,它们会永远增长。
这是我的应用程序(api.py):
我这样在命令行上运行它:
我使用一个简单的脚本测试应用程序:
这是在 Ubuntu 18.04 上运行的,starlette==0.13.3 和 uvicorn==0.11.3 在 Python 3.6 上
作为比较,运行 w/o starlette+uvicorn 时没有这样的效果。以下控制程序将在 lsof 上生成 2 个且仅 2 个文件句柄:
为什么在介绍starlette和uvicorn时会创建这么多文件句柄,就像我在lsof上看到的那样?
javascript - 浏览器刷新不发送作为服务器发送响应的一部分收到的最后一个事件 ID
我正在尝试为使用 python 中的服务器发送事件的用户构建实时通知系统。
我面临的问题是当我刷新浏览器时,这意味着浏览器将尝试再次点击 EventSource url,并且根据文档,它应该在下一个请求中将 event.lastEventId 作为标头的一部分发送。每次刷新页面时我都会得到无。
在服务器端
现在,根据 SSE 上的每个文档,当客户端重新连接或刷新页面时,它将在标题中发送 last-event-id。我正在尝试使用 request.headers.get('last-event-id') 读取它,但这始终为空。
有关如何获取最后一个事件 ID 的任何指示都会有所帮助。另外,一旦用户看到事件,我将如何确保即使稍后我也不会发送相同的事件,因为我的整个逻辑将基于服务器接收到的 last-event-id,所以如果它在阅读后为 None Id 1 到 4 的事件,我如何确保在服务器中我不应该将这些发回,即使用户的 last-event-id 为空
.
添加浏览器快照
第一张图片显示浏览器正在接收事件。例如 {alpha: abc, id:4}
第二张图片显示收到的事件正确设置了 lastEventId。
python - 调用 WebSocket.close 时现有等待会发生什么
如果我打开 Starlette/FastAPI WebSocket,如果我从协程外部关闭 WebSocket,当前等待从客户端接收数据的协程会发生什么情况?receive
是引发异常的调用还是协程永远留在内存中,因为它永远不会收到任何东西?
python-asyncio - FastAPI如何将ZMQ添加到事件循环
我很惊讶这并没有真正被详细询问,但由于某种原因,我无法在任何地方找到这个问题或解决方案。似乎很多人都遇到了一个问题,即您有一个 fastAPI 应用程序,该应用程序还需要与其他一些微服务进行通信(以比 http 消息更有效的方式)。我已经阅读了所有关于集成到 asyncio 中的 zmq 文档,但是到目前为止,我还没有找到任何关于如何使用 fastapi(甚至是 starlette)将 zmq 添加到事件循环中的信息。这是 zmq 网站上的代码示例:
这向我们展示了一个异步函数,这很棒,但是这又一次需要在事件循环中与 fastAPI 协程一起运行。这应该怎么做?除了后台任务之外,fastAPI 文档并没有真正为我们提供任何接口来运行单独的协程。我不确定后台任务中是否发生了任何其他魔法,但对于需要与另一个微服务通信的东西,我希望它具有类似于 fastAPI 协程的调度。此外,您无法在启动时启动后台任务,因此您必须进行一些欺骗性的调用才能使其运行(这很hacky ..但从技术上讲是可行的)。此外,如果我们可以只注册一个处理程序,那就更好了
这将基于某处的配置,允许 zmq 上下文中的所有消息自动转到此函数。这可能允许我们在 fastAPI 协程中运行 zmq,只需绑定另一个端口,并确保来自该端口的所有流量都流向这个特殊的 app.set 方法。像这样的东西我会很好......
理想情况下,这是我想要的,使用 fastAPI 协程......但是让 zmq 套接字调用对特定函数的响应。是否可以创建协程示例或这种模板化示例?如果不是,人们如何声称您可以有效地将 zmq 与 fastapi 一起使用?(我想后台任务可以解决问题..但它似乎真的很虚伪)
python - How to get user auth info in FastAPI, when using `app.add_route()` for GraphQL?
I'm using FastAPI and now want to add GraphQL using graphene
.
I'm using:
fastapi-user
starlette.graphql.GraphQLApp
Here's the routing for GraphQL and how I used fastapi-user package.
In the schema
, I need to get user information and control the role based auth.
How to, or how can I use get_current_active_user()
method with GraphQL schema?
python - 协程对象不是 JSON 可序列化的
我是异步 python 的新手。
我创建了一个应该从文件系统加载文件的单例对象
Singleton
是一个普通的元类
我使用它AppResourceLoader
在类构造函数中上传文件并稍后通过getter访问它
这个get_catalog
方法我在另一个类中调用
装饰ujson_route
器看起来像这样
这个get_catalog
函数ServiceBrokerController
被 Starlette 路由对象使用
我运行测试get_catalog
看起来像这样
但是当我使用plain执行测试时pytest -v
,它失败并出现错误
在我使load_yaml
方法异步之前它起作用了。
怎么了?据我了解,我需要放在await
某个地方,因为据我了解,从错误中它返回协程而不是文件数据。
starlette - 没有背景对象时如何使用 Starlette 的后台任务?
我希望目前避免使用芹菜。在 Starlette 的文档中,他们提供了两种添加后台任务的方法:
通过石墨烯:https ://www.starlette.io/graphql/
通过 JSON 响应:https ://www.starlette.io/background/
有谁知道用 Ariadne 在 Starlette 的背景中添加任务的方法?我无法在解析器中返回 JSONResponse,也无权访问 info.context["background"]。我唯一附加到我的上下文的是我的请求对象。
python - 如何用正文以编程方式实例化 Starlette 的请求?
我有一个项目,其中包含一些使用 FastAPI 的 API,我需要在项目中调用其中一个 API 函数。使用 FastAPI 和 Starlette 的 API 函数如下所示
我发送一个包含新选项卡数据的 JSON 作为我的请求的主体,稍后将使用await request.json()
.
现在,我需要调用insert_tab
另一个函数,所以我需要以某种方式Request
从Starlette实例化对象。我以前做过,但没有 JSON 正文:
但在这种情况下,我还需要将 JSON 主体注入到Request
对象中,但我找不到这样做的方法。
有没有人这样做过或知道我该怎么做?