相关疑难解决方法(0)

FastAPI - 如何在路由器内获取应用程序实例?

我想app在我的路由器文件中获取该实例,我该怎么办?

main.py的如下:

# ...
app = FastAPI()
app.machine_learning_model = joblib.load(some_path)
app.include_router(some_router)
# ...
Run Code Online (Sandbox Code Playgroud)

现在我想在some_router的文件中使用app.machine_learning_model,我该怎么办?

python starlette fastapi

14
推荐指数
1
解决办法
1万
查看次数

FastAPI StreamingResponse 不使用生成器函数进行流式传输

我有一个相对简单的 FastAPI 应用程序,它接受查询并从 ChatGPT 的 API 流回响应。ChatGPT 正在流回结果,我可以看到它在输入时被打印到控制台。

不工作的是StreamingResponse通过 FastAPI 返回。相反,响应会一起发送。我真的不知道为什么这不起作用。

这是 FastAPI 应用程序代码:

import os
import time

import openai

import fastapi
from fastapi import Depends, HTTPException, status, Request
from fastapi.security import HTTPBearer, HTTPAuthorizationCredentials
from fastapi.responses import StreamingResponse

auth_scheme = HTTPBearer()
app = fastapi.FastAPI()

openai.api_key = os.environ["OPENAI_API_KEY"]


def ask_statesman(query: str):
    #prompt = router(query)
    
    completion_reason = None
    response = ""
    while not completion_reason or completion_reason == "length":
        openai_stream = openai.ChatCompletion.create(
            model="gpt-3.5-turbo",
            messages=[{"role": "user", "content": query}],
            temperature=0.0,
            stream=True,
        )
        for …
Run Code Online (Sandbox Code Playgroud)

python streaming python-requests fastapi openai-api

14
推荐指数
1
解决办法
3万
查看次数

如何在FastAPI中的HTTP请求之间共享变量?

HTTP如何在 FastAPI 的请求之间共享变量值?例如,我有一个POST请求,其中我获取一些音频文件,然后将它们的信息转换为 Pandas Dataframe。我想在请求Dataframe中发送它GET,但我无法访问Dataframe请求GET范围。

@app.post(
    path="/upload-audios/",
    status_code=status.HTTP_200_OK
)
async def upload_audios(audios: list[UploadFile] = File(...)):
    filenames = [audio.filename for audio in audios]
    audio_data = [audio.file for audio in audios]
    new_data = []
    final_data = []
    header = ["name", "file"]
    for i in range(len(audios)):
        new_data = [filenames[i], audio_data[i]]
        final_data.append(new_data)
    new_df = pd.DataFrame(final_data, columns=header)
    return f"You have uploaded {len(audios)} audios which names are: {filenames}"

@app.get("/get-dataframe/")
async def get_dataframe():
    pass
Run Code Online (Sandbox Code Playgroud)

python httprequest starlette fastapi

11
推荐指数
1
解决办法
1万
查看次数

如何创建可以接受 Form 或 JSON 正文的 FastAPI 端点?

我想在 FastAPI 中创建一个可能接收(多部分)Form数据或JSON正文的端点。有没有办法让这样的端点接受或者检测正在接收哪种类型的数据?

python json multipartform-data starlette fastapi

6
推荐指数
1
解决办法
6025
查看次数

FastAPI RedirectResponse 自定义标头

基于我之前的问题,我现在需要在响应中添加一个标头。

根据文档,我可以简单地将标题和另一个属性添加到RedirectResponse对象中。

当我对此进行测试时,它似乎没有携带标头值。

根据这篇文章,不可能为重定向请求设置标头。所以,而不是重定向,也许我应该尝试其他方法?

有任何想法吗?

from fastapi import FastAPI, Request
from starlette.responses import RedirectResponse

app = FastAPI()

@app.get("/data/")
async def api_data(request: Request):
    params = str(request.query_params)
    url = f'http://some.other.api/{params}'
    headers = {'Authorization': "some_long_key"}
    response = RedirectResponse(url=url, headers=headers)
    return response
Run Code Online (Sandbox Code Playgroud)

python fastapi

5
推荐指数
1
解决办法
6077
查看次数

如何从fastapi中的另一个api调用一个api?

我能够从另一个 API 获得一个 API 的响应,但无法将其存储在某处(在返回响应之前的文件或其他内容中) response=RedirectResponse(url="/apiname/")(我想访问带有标头和正文的发布请求)

我想存储这个响应内容而不返回它。

是的,如果我返回函数,我会得到结果,但是当我打印它时,我找不到结果。另外,如果我给出发布请求,那么我会收到错误实体未找到。

我阅读了 starlette 和 fastapi 文档,但找不到解决方法。回调也没有帮助。

python callback python-3.x starlette fastapi

5
推荐指数
2
解决办法
7282
查看次数

在 Uvicorn/FastAPI 内发出下游 Https 请求的正确方法是什么?

我有一个 API 端点(FastAPI / Uvicorn)。除此之外,它还向另一个 API 请求信息。当我使用多个并发请求加载 API 时,我开始收到以下错误:

h11._util.LocalProtocolError: can't handle event type ConnectionClosed when role=SERVER and state=SEND_RESPONSE
Run Code Online (Sandbox Code Playgroud)

在正常环境中,我会利用request.session,但我知道它不是完全线程安全的。

因此,在 FastAPI 等框架内使用请求的正确方法是什么,其中多个线程将requests同时使用该库?

python python-requests fastapi

5
推荐指数
1
解决办法
4478
查看次数

如何在 FastAPI 中将请求重新路由到不同的 URL/端点?

我正在尝试在我的 FastAPI 应用程序中编写一个中间件,以便到达与特定格式匹配的端点的请求将被重新路由到不同的 URL,但我无法找到一种方法来做到这一点,因为它request.url是只读的。

我还在寻找一种在重新路由之前更新请求标头的方法。

这些事情在 FastAPI 中可能实现吗?

重定向是迄今为止我能做的最好的事情:

from fastapi import Request
from fastapi.responses import RedirectResponse

@app.middleware("http")
async def redirect_middleware(request: Request, call_next):
    if matches_certain_format(request.url.path):
        new_url = create_target_url(request.url.path)
        return RedirectResponse(url=new_url)
Run Code Online (Sandbox Code Playgroud)

python middleware starlette fastapi

5
推荐指数
1
解决办法
4307
查看次数

使用不支持查询参数的 python fast api 代理外部网站

我正在尝试使用 python Fast API 框架代理外部网站(在不同容器上运行的 Flower 监控 URL):

\n
client = AsyncClient(base_url=f'http://containername:7800/monitor')\n\n@app.get(\xe2\x80\x9c/monitor/{path:path}\xe2\x80\x9d)\nasync def tile_request(path: str):\n    req = client.build_request("GET", path)\n    r = await client.send(req, stream=True)\n    return StreamingResponse(\n        r.aiter_raw(),\n        background=BackgroundTask(r.aclose),\n        headers=r.headers\n   )\n
Run Code Online (Sandbox Code Playgroud)\n

它能够代理每个路径的容器 URL。对于前。

\n

http://python_server:8001/monitor/dashboard --> http://containername:7800/monitor/dashboard

\n

http://python_server:8001/monitor/tasks --> http://containername:7800/monitor/tasks

\n

效果很好。但是当 PATH 的 URL 中有一些查询参数时,它会失败。

\n

对于前。

\n
http://python_server:8001/monitor/dashboard?json=1&_=1641485992460 --> redirects to http://containername:7800/monitor/dashboard \n
Run Code Online (Sandbox Code Playgroud)\n

(请注意,URL 中不会附加任何查询参数)。

\n

任何人都可以帮助我们如何使用任何查询参数代理此外部网站的任何路径。

\n

python fastapi httpx

3
推荐指数
1
解决办法
4230
查看次数

How to pass URL as a path parameter to a FastAPI route?

I have created a simple API using FastAPI, and I am trying to pass a URL to a FastAPI route as an arbitrary path parameter.

from fastapi import FastAPI
app = FastAPI()
@app.post("/{path}")
def pred_image(path:str):
    print("path",path)
    return {'path':path}
Run Code Online (Sandbox Code Playgroud)

When I test it, it doesn't work and throws an error. I am testing it this way:

http://127.0.0.1:8000/https://raw.githubusercontent.com/ultralytics/yolov5/master/data/images/zidane.jpg
Run Code Online (Sandbox Code Playgroud)

python starlette fastapi

3
推荐指数
1
解决办法
7973
查看次数

如何在 FastAPI POST 请求中同时添加文件和 JSON 正文?

具体来说,我希望以下示例能够正常工作:

from typing import List
from pydantic import BaseModel
from fastapi import FastAPI, UploadFile, File


app = FastAPI()


class DataConfiguration(BaseModel):
    textColumnNames: List[str]
    idColumn: str


@app.post("/data")
async def data(dataConfiguration: DataConfiguration,
               csvFile: UploadFile = File(...)):
    pass
    # read requested id and text columns from csvFile
Run Code Online (Sandbox Code Playgroud)

如果这不是 POST 请求的正确方法,请告诉我如何从 FastAPI 中上传的 CSV 文件中选择所需的列。

python http http-post pydantic fastapi

2
推荐指数
3
解决办法
1659
查看次数