相关疑难解决方法(0)

FastAPI 以串行方式而不是并行方式运行 api 调用

我有以下代码:

import time
from fastapi import FastAPI, Request
    
app = FastAPI()
    
@app.get("/ping")
async def ping(request: Request):
        print("Hello")
        time.sleep(5)
        print("bye")
        return {"ping": "pong!"}
Run Code Online (Sandbox Code Playgroud)

如果我在本地主机上运行我的代码 - 例如http://localhost:8501/ping- 在同一浏览器窗口的不同选项卡中,我得到:

Hello
bye
Hello
bye
Run Code Online (Sandbox Code Playgroud)

代替:

Hello
Hello
bye
bye
Run Code Online (Sandbox Code Playgroud)

我已经阅读过有关使用的内容httpx,但仍然无法实现真正​​的并行化。有什么问题?

python asynchronous concurrent-processing python-asyncio fastapi

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

分块传输编码 - 浏览器行为

我正在尝试以分块模式发送数据.正确设置所有标头并相应地编码数据.浏览器将我的响应识别为分块,接受标头并开始接收数据.

我期待浏览器会在每个收到的块上更新页面,而是等待直到收到所有块然后全部显示它们.这是预期的行为吗?

我希望看到每个块在收到后立即显示.使用时curl,每个块在收到后立即显示.为什么GUI浏览器不会发生同样的情况?他们使用某种缓冲/缓存吗?

我将Cache-Control标头设置为no-cache,所以不确定它是否与缓存有关.

browser firefox google-chrome http

23
推荐指数
2
解决办法
7552
查看次数

如何从一个域重定向到另一个域并为另一个域设置 cookie 或标头?

我正在使用 FastAPIRedirectResponse并尝试将用户从一个应用程序(域)重定向到另一个应用程序(域),并在 ; 中设置一些responsecookie 然而,cookie 总是被删除/不被传输。如果我尝试添加一些标头,我添加到的所有标头RedirectResponse也不会传输。

@router.post("/callback")
async def sso_callback(request: Request):
   jwt_token = generate_token(request)
   redirect_response = RedirectResponse(url="http://192.168.10.1/app/callback", 
                             status_code=303)
   redirect_response.set_cookie(key="accessToken", value=jwt_token, httponly=True)
   redirect_response.headers["Authorization"] = str(jwt_token)
   return redirect_response
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?先谢谢您的帮助。

python cookies redirect cross-domain fastapi

10
推荐指数
1
解决办法
8893
查看次数

cURL - 结构化验证服务器发送事件的请求

我是cURL和服务器发送事件的新手.我知道如何使用cURL构建一个简单的GET,POST请求并获得响应.另外,从理论上讲,我知道服务器发送事件是通过创建事件源的监听器来处理的,但我不知道如何继续使用cURL验证任何此类API.任何指导表示赞赏.

curl server-sent-events

7
推荐指数
2
解决办法
8453
查看次数

在 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 通过 Swagger UI 发送授权标头?

在前端,我有以下 JS 函数:

export const uploadFormData = async (
    token: string,
    email: string,
    formInfo: Array<Object>,
): Promise<any> => {
    const formData = new FormData();
    formData.append('email', email);
    formData.append('form_info', JSON.stringify({ formInfo }));
    return fetch(
        `${process.env.ENDPOINT}/upload_form_data/`,
        {
            method: 'POST',
            headers: {
                Authorization: `Token ${token}`,
            },
            body: formData,
        },
    ).then((response) => {
        console.log(response.body?.getReader());
        if (response.status === 404) {
            throw Error('Url not found');
        }
        if (response.status === 422) {
            throw Error('Wrong request format');
        }
        if (response.status !== 200) {
            throw Error('Something went wrong with uploading …
Run Code Online (Sandbox Code Playgroud)

python swagger reactjs swagger-ui fastapi

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

如果用户未使用 FastAPI-Login 包登录,则重定向到登录页面

我想在用户未登录时将他们重定向到登录页面。

这是我的代码:

from fastapi import (
    Depends,
    FastAPI,
    HTTPException,
    status,
    Body,
    Request
)
from fastapi.encoders import jsonable_encoder
from fastapi.security import OAuth2PasswordBearer, OAuth2PasswordRequestForm
from fastapi.responses import HTMLResponse, RedirectResponse
import app.models as models
import app.database as database
from datetime import datetime, timedelta
from jose import JWTError, jwt
from starlette.responses import FileResponse
from fastapi_login import LoginManager
from fastapi_login.exceptions import InvalidCredentialsException
from fastapi import Cookie
import re

app = FastAPI()

oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")
manager = LoginManager(SECRET_KEY, token_url="/auth/login", use_cookie=True)
manager.cookie_name = "token"


@app.get("/")
@app.get("/item")
async …
Run Code Online (Sandbox Code Playgroud)

python fastapi

4
推荐指数
1
解决办法
4212
查看次数

如何将FastAPI请求转发到另一台服务器?

我有一个用于测试/开发目的的 FastAPI 应用程序。我想要的是,到达我的应用程序的任何请求都会按原样自动发送到另一台服务器上的另一个应用程序,并具有完全相同的参数和相同的端点。这不是重定向,因为我仍然希望应用程序像往常一样处理请求并返回值。我只想向不同服务器上的不同版本的应用程序发起类似的请求,而不需要等待其他服务器的答复,以便其他应用程序获取该请求,就像原始请求发送给它一样。

我怎样才能做到这一点?以下是我用于处理请求的示例代码:

@app.post("/my_endpoint/some_parameters")
def process_request(
    params: MyParamsClass,
    pwd: str = Depends(authenticate),
):
    # send the same request to http://my_other_url/my_endpoint/
    return_value = process_the_request(params)
    return return_value.as_json()
Run Code Online (Sandbox Code Playgroud)

python rest request forward fastapi

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

在 FastAPI 中返回 StreamingResponse 时出现“AttributeError:encode”

我正在使用 Python 3.10 和 FastAPI0.92.0编写服务器发送事件 (SSE) 流 api。Python 代码如下所示:

from fastapi import APIRouter, FastAPI, Header

from src.chat.completions import chat_stream
from fastapi.responses import StreamingResponse

router = APIRouter()

@router.get("/v1/completions",response_class=StreamingResponse)
def stream_chat(q: str, authorization: str = Header(None)):
    auth_mode, auth_token = authorization.split(' ')
    if auth_token is None:
        return "Authorization token is missing"
    answer = chat_stream(q, auth_token)
    return StreamingResponse(answer, media_type="text/event-stream")
Run Code Online (Sandbox Code Playgroud)

这是chat_stream函数:

import openai

def chat_stream(question: str, key: str):
    openai.api_key = key
    # create a completion
    completion = openai.Completion.create(model="text-davinci-003",
                                          prompt=question,
                                          stream=True)
    return …
Run Code Online (Sandbox Code Playgroud)

streaming python-3.x server-sent-events fastapi openai-api

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

FASTAPI:无法呈现 html 页面

我正在尝试呈现显示来自网络摄像头的视频捕获的 html 页面。但面临错误:- 500 Server Error TypeError: TemplateResponse() missing 1 required positional argument: 'context'。我在 Flask 中尝试过的相同代码,在那里工作正常。

from fastapi import FastAPI
import uvicorn
from fastapi import Depends, FastAPI
from fastapi import FastAPI, Request
from fastapi.responses import HTMLResponse
from fastapi.templating import Jinja2Templates
import cv2

app = FastAPI(debug=True)
templates = Jinja2Templates(directory="templates")

@app.get("/")
async def index():
    return templates.TemplateResponse("index.html")


async def gen_frames(camera_id):
    cap=  cv2.VideoCapture(0)

    while True:
        # for cap in caps:
        # # Capture frame-by-frame
        success, frame = cap.read()  # read the camera frame …
Run Code Online (Sandbox Code Playgroud)

python fastapi

2
推荐指数
1
解决办法
1505
查看次数