Heim > Backend-Entwicklung > Python-Tutorial > Wie werden Datei-Uploads und JSON-Daten gleichzeitig in einer FastAPI-POST-Anfrage verarbeitet?

Wie werden Datei-Uploads und JSON-Daten gleichzeitig in einer FastAPI-POST-Anfrage verarbeitet?

Patricia Arquette
Freigeben: 2024-12-15 17:01:10
Original
219 Leute haben es durchsucht

How to Handle File Uploads and JSON Data Simultaneously in a FastAPI POST Request?

Wie füge ich einer FastAPI-POST-Anfrage sowohl eine Datei als auch einen JSON-Text hinzu?

Methode 1: Datei und Formular verwenden

from fastapi import FastAPI, UploadFile, File, Form

app = FastAPI()

@app.post("/data")
async def data(dataConfiguration: DataConfiguration,
               csvFile: UploadFile = File(...)):
    pass
Nach dem Login kopieren

Methode 2 : Verwendung von Pydantic-Modellen und Abhängigkeiten

from fastapi import Form, File, UploadFile, FastAPI, Depends
from typing import List, Optional
from fastapi.responses import HTMLResponse
from pydantic import BaseModel
from fastapi.templating import Jinja2Templates

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

class Base(BaseModel):
    name: str
    point: Optional[float] = None
    is_accepted: Optional[bool] = False

def checker(data: str = Form(...)):
    try:
        return Base.model_validate_json(data)
    except ValidationError as e:
        raise HTTPException(
            detail=jsonable_encoder(e.errors()),
            status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
        )

@app.post("/submit")
def submit(base: Base = Depends(checker), files: List[UploadFile] = File(...)):
    return {"JSON Payload": base, "Filenames": [file.filename for file in files]}
Nach dem Login kopieren

Methode 3: Verwendung von Formulardaten als einzelne JSON-Zeichenfolge

from fastapi import FastAPI, status, Form, UploadFile, File, Depends, Request
from pydantic import BaseModel, ValidationError
from fastapi.exceptions import HTTPException
from fastapi.encoders import jsonable_encoder
from typing import Optional, List
from fastapi.templating import Jinja2Templates
from fastapi.responses import HTMLResponse

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

class Base(BaseModel):
    name: str
    point: Optional[float] = None
    is_accepted: Optional[bool] = False

def checker(data: str = Form(...)):
    try:
        return Base.model_validate_json(data)
    except ValidationError as e:
        raise HTTPException(
            detail=jsonable_encoder(e.errors()),
            status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
        )

@app.post("/submit")
def submit(base: Base = Depends(checker), files: List[UploadFile] = File(...)):
    return {"JSON Payload": base, "Filenames": [file.filename for file in files]}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie werden Datei-Uploads und JSON-Daten gleichzeitig in einer FastAPI-POST-Anfrage verarbeitet?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage