我有一个 API,可以将StreamingReponse( https://fastapi.tiangolo.com/advanced/custom-response/?h=fileresponse#streamingresponse ) 输出为 zip/gz。当我下载文件 VIA Swagger 时,我得到一个非常奇怪的名称,例如:
application_gz export something=1&something=1&something=Example&archive_type=gz blob https __<ip_address>_aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaaa
所以基本上 - 带有服务器的 ip 地址、uuid、一些名称。无论如何,是否可以将其更改为我决定的内容,或者至少更优雅?谢谢!
我对FastAPI大多数async相关功能都很陌生,因此我有可能同时犯下多个失礼行为;任何帮助表示赞赏。
我想提供一个公开一些功能的 API,例如将较低的字符串转换为较高的字符串(对于此 MWE)。我不想立即计算每个单独的请求,而是想填充一个缓冲区,并且仅在该缓冲区已满时才进行计算。这可能是因为它更便宜(计算上或美元方面)并且我对引入的延迟感到满意。
我尝试了以下实现
from fastapi import FastAPI
import asyncio
from typing import Dict
N = 2
app = FastAPI()
app.state.requests = []
app.state.answers = []
app.state.state = "start"
@app.get("/upper/")
async def upper(x: str) -> Dict[str, str]:
myid = len(app.state.requests)
app.state.requests.append(x)
if len(app.state.requests) == N:
app.state.answers = []
for i in range(len(app.state.requests)):
app.state.answers.append(app.state.requests[i].upper())
app.state.state = "computed"
else:
await block_compute()
myanswer = app.state.answers[myid]
if len(app.state.requests) == N:
app.state.answers = []
app.state.requests = []
app.state.state = "start" …Run Code Online (Sandbox Code Playgroud) 我是 webdev 的新手,我有这样的用例:用户向 API 发送一个大文件(例如视频文件),然后该文件需要可供其他 API 访问(可能位于不同的服务器上) )进行进一步处理。
我使用 FastAPI 作为后端,定义一个类型为 的文件参数UploadFile来接收和存储文件。但是,让其他 API 可以访问此文件的最佳方法是什么?有没有办法可以URL从保存的文件中获取公开访问权限,其他 API 可以使用哪些文件来下载该文件?
我有两个看起来相似的路径操作函数,除了第一个返回特定用户的所有数据,第二个仅返回当前(登录)用户的数据(使用 schema UserOut,其字段较少) :
@router.get("/{id}", response_model=User)
async def get_user(user_id: PydanticObjectId):
user = await User.find_one(User.id == user_id)
if user is None:
raise HTTPException(status_code=404, detail="User not found")
return user
@router.get("/me")
async def get_current_user(current_user: User = Depends(get_current_active_user)):
return current_user
Run Code Online (Sandbox Code Playgroud)
问题是当我从 Postman 调用第二个方法时,它将端点/me作为id第一个端点,所以我总是收到 pydantic 验证错误"me" is not a valid user ID。
我该如何解决这个问题?我是否需要修改我的端点或者是否有其他替代方案?
我有一个使用 PostgreSQL 在生产环境中运行的 Django 项目。
我想启动一个单独的 FastAPI 微服务来执行特定任务,并且希望它直接与我与 Django 连接的数据库进行通信。
我不想使用pydantic重写FastAPI中的所有模型,同时我也不想犯错误。
在 Django 中,可以python manage.py inspectdb使用现有数据库自动生成模型。FastAPI、SQLAlchemy 或 Pydantic 中是否有等效项?
我正在为网站使用 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) 我正在关注 ChristopherGS 的 FASTapi 教程,但我停留在第 6 部分,因为我相信他的语法可能已经被弃用。
当程序停止时我就到了AttributeError: module 'jinja2' has no attribute 'contextfunction最后。怎么解决这个问题,我已经被困在这里三天了。
这是我的代码:
from fastapi.templating import Jinja2Templates
from typing import Optional, Any
from pathlib import Path
from app.schemas import RecipeSearchResults, Recipe, RecipeCreate
from app.recipe_data import RECIPES
BASE_PATH = Path(__file__).resolve().parent
TEMPLATES = Jinja2Templates(directory=str(BASE_PATH / "templates"))
app = FastAPI(title="Recipe API", openapi_url="/openapi.json")
api_router = APIRouter()
# Updated to serve a Jinja2 template
# https://www.starlette.io/templates/
# https://jinja.palletsprojects.com/en/3.0.x/templates/#synopsis
@api_router.get("/", status_code=200)
def root(request: Request) -> dict:
"""
Root GET
""" …Run Code Online (Sandbox Code Playgroud) 我第一次使用 HTTpOnly Cookie 实现登录身份验证。就我而言,当用户使用 fastapi 和 uvicorn 在Python 服务中调用登录方法时创建 cookie 。
我已经阅读了MDN文档来实现 expires 属性,因此,浏览器会在时间到期时删除此 cookie。
我已经使用 http.cookies 和Morsel在 Python 中实现了 Cookie,以应用HttpOnly属性,如下所示:
from http import cookies
from fastapi import FastAPI, Response, Cookie, Request
from fastapi.responses import HTMLResponse, FileResponse
from fastapi.staticfiles import StaticFiles
from fastapi.templating import Jinja2Templates
mytoken = 'blablabla'
def getUtcDate():
sessionDate = datetime.now()
sessionDate += timedelta(minutes=2)
return sessionDate.strftime('%a, %d %b %Y %H:%M:%S GMT')
@app.get('cookietest')
def getCookie(response: Response):
cookie = cookies.Morsel()
cookie['httponly'] …Run Code Online (Sandbox Code Playgroud) 我正在开发一个 FastAPI 应用程序,该应用程序需要对用户访问的某些端点进行身份验证。我正在使用 FastAPI 中的 Oauth2 和 Jose 为我的身份验证过程创建 JWT。经过一些研究后,确保令牌在前端受到保护的最佳方法似乎是将它们存储在 HttpOnly Cookie 中。我正在努力了解如何通过 HttpOnly Cookie 正确传递 JWT,以便我的 FastAPI 服务器能够验证标头中的 JWT。目前,当我尝试将 JWT 令牌作为 HttpOnly Cookie 传递时,我得到一个401 Unauthorized Error.
当我将令牌作为模板字符串编码到标头中时,我已经能够使用 JWT 令牌成功地对用户进行身份验证。但是,当我通过标头将 JWT 作为 Cookie 传递到 FastAPI 服务器时,我的 FastAPI 服务器无法对用户进行身份验证并返回401 unauthorized error. 我尝试查看网络选项卡,看看我的请求中向 FastApi 服务器发送了哪些标头,以便更好地了解这两种情况之间的不同之处。
当我将 JWT 作为模板字符串传递并获得 200 响应时,这是在标头中:
身份验证:不记名令牌
async function getPosts() {
const url = "http://localhost:8000/posts";
const fetchConfig = {
headers: {
Authorization: `Bearer ${tokenValue}`,
},
};
const response = await fetch(url, …Run Code Online (Sandbox Code Playgroud) fastapi ×10
python ×6
python-3.x ×2
async-await ×1
charts ×1
cookies ×1
django ×1
fetch ×1
html ×1
jinja2 ×1
jwt ×1
matplotlib ×1
next.js ×1
oauth-2.0 ×1
postgresql ×1
rest ×1
sqlalchemy ×1
swagger ×1
uvicorn ×1