我正在使用 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) 我正在尝试呈现显示来自网络摄像头的视频捕获的 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) 具体来说,我希望以下示例能够正常工作:
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 文件中选择所需的列。
我正在为网站使用 Nextjs 前端和 FastAPI 后端。我在前端有一个“以太坊地址”的输入表单,并使用输入的地址,我在后端生成一个 matplotlib 图表,显示“一段时间内的以太坊余额”。现在,我尝试使用 FastAPI 返回此图表,以便可以在前端显示它。我不想在本地保存图表。
这是到目前为止我的相关代码:
前端/ nexjs 文件名为“Chart.tsx”。正文中的“ethAddress”正在捕获输入表单中输入的数据。
fetch("http://localhost:8000/image", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(ethAddress),
}).then(fetchEthAddresses);
Run Code Online (Sandbox Code Playgroud)
生成名为 ethBalanceTracker.py 的 matplotlib 图表的后端 python 文件
#Imports
#Logic for chart here
plt.plot(times, balances)
buf = BytesIO()
plt.savefig(buf, format="png")
buf.seek(0)
return StreamingResponse(buf, media_type="image/png")
Run Code Online (Sandbox Code Playgroud)
使用名为 api.py 的 FastAPI 的后端 python 文件
@app.get("/image")
async def get_images() -> dict:
return {"data": images}
@app.post("/image")
async def add_image(ethAddress: dict) -> dict:
test = EthBalanceTracker.get_transactions(ethAddress["ethAddress"])
images.append(test)
Run Code Online (Sandbox Code Playgroud)
我已经尝试了上面的代码和其他一些变体。我使用是StreamingResponse因为我不想在本地保存图表。我的问题是我无法显示图表localhost:8000/images并得到一个 …
我正在使用图像压缩来减小图像大小。提交帖子请求时,我没有收到任何错误,但无法弄清楚为什么图像没有保存。这是我的代码:
@app.post("/post_ads")
async def create_upload_files(title: str = Form(),body: str = Form(),
db: Session = Depends(get_db), files: list[UploadFile] = File(description="Multiple files as UploadFile")):
for file in files:
im = Image.open(file.file)
im = im.convert("RGB")
im_io = BytesIO()
im = im.save(im_io, 'JPEG', quality=50)
Run Code Online (Sandbox Code Playgroud) 了解 Uvicorn 异步行为
我试图了解 Uvicorn 的行为。我创建了一个示例 fastapi 应用程序,主要休眠 5 秒。
import time
from datetime import datetime
from fastapi import FastAPI
app = FastAPI()
counter = 0
@app.get("/")
def root():
global counter
counter = counter + 1
my_id = counter
print(f'I ({my_id}) am feeling sleepy')
time.sleep(5)
print(f'I ({my_id}) am done sleeping')
return {}
Run Code Online (Sandbox Code Playgroud)
我使用 Apache Bench 的以下命令调用我的应用程序:
ab -n 5 -c 5 http://127.0.0.1:8000/
Run Code Online (Sandbox Code Playgroud)
输出:
I (1) am feeling sleepy -- 0s
I (1) am done sleeping -- 5s
I (2) am …Run Code Online (Sandbox Code Playgroud) 我想将文件上传到 FastAPI 后端并将其转换为 Pandas DataFrame。但是,我似乎不明白如何使用 FastAPI 的UploadFile对象来做到这一点。更具体地说,我应该将什么传递给该pd.read_csv()函数?
这是我的 FastAPI 端点:
@app.post("/upload")
async def upload_file(file: UploadFile):
df = pd.read_csv("")
print(df)
return {"filename": file.filename}
Run Code Online (Sandbox Code Playgroud) fastapi ×7
python ×6
charts ×1
csv ×1
dataframe ×1
http ×1
http-post ×1
matplotlib ×1
next.js ×1
openai-api ×1
pandas ×1
pydantic ×1
python-3.x ×1
streaming ×1
uvicorn ×1