FastAPI håndterer HTML skjemadata (Form) og filutlastinger (File/UploadFile) — som skiller seg fra JSON-brødtekster, ettersom de bruker ulike innholdstyper (). Begge deklareres med spesielle parametertyper.
FastAPI håndterer HTML skjemadata (Form) og filutlastinger (File/UploadFile) — som skiller seg fra JSON-brødtekster, ettersom de bruker ulike innholdstyper (). Begge deklareres med spesielle parametertyper.
multipart/form-datafrom fastapi import Form
@app.post("/login")
def login(username: str = Form(), password: str = Form()): # form fields, not JSON
# data comes as application/x-www-form-urlencoded or multipart/form-data
return {"username": username}
Bruk Form() for å motta HTML-skjemafelt (f.eks. et påloggingsskjema). Merk: en rute kan bruke enten en JSON-brødtekst eller skjemadata, ikke begge, siden de er ulike innholdstyper. (Krever at python-multipart er installert.)
from fastapi import File, UploadFile
@app.post("/upload")
async def upload(file: UploadFile): # a single file
contents = await file.read() # read the file's bytes
file.filename # original name
file.content_type # MIME type
# save it:
with open(f"uploads/{file.filename}", "wb") as f:
f.write(contents)
return {"filename": file.filename, "size": len(contents)}
UploadFile er den anbefalte typen — det er en spoolet fil (store filer går til disk, ikke helt i minnet), med async-metoder (read, write, seek) og metadata. Bruk det i stedet for rå bytes for alt annet enn bittesmå filer.
@app.post("/upload-many")
async def upload_many(files: list[UploadFile]): # multiple files
return [f.filename for f in files]
@app.post("/profile")
async def profile(name: str = Form(), avatar: UploadFile = File()):
# combine form fields AND a file upload in one multipart request
...
if file.content_type not in ["image/jpeg", "image/png"]: # check type
raise HTTPException(400, "Invalid file type")
# also: limit file SIZE, sanitize filenames, scan content — uploads are untrusted input
Håndtering av skjemadata og filutlastinger er et vanlig, praktisk behov — påloggingsskjemaer, profilbildeutlastinger, dokumentinnsendinger og filbehandlings-APIer krever det alle, og det fungerer annerledes enn JSON-brødtekstene som FastAPI bruker som standard.
Å forstå Form() for skjemafelt og spesielt UploadFile for utlastinger (den anbefalte tilnærmingen, siden den spooler store filer til disk i stedet for å laste alt inn i minnet — viktig for å håndtere store filer uten å tømme RAM) er nødvendig for disse funksjonene.
Like viktig er sikkerhetsansvaret som følger med utlastinger: siden opplastede filer er upålitelig inndata, er validering av deres type og størrelse, sanering av filnavn og forsiktighet med hvordan du lagrer/betjener dem essensielt for å unngå sårbarheter.
Å vite hvordan du mottar skjemafelt, håndterer enkle og flere filutlastinger, kombinerer skjemaer med filer og validerer utlastinger på en sikker måte er praktisk kunnskap for å bygge virkelige APIer som aksepterer brukersendt innhold.