Formulärdata och filuppladdningar
Hantera traditionell HTML-formulärdata och implementera filuppladdningar med FastAPI:s inbyggda funktioner.
Formulärdata och filuppladdningar är en gratis lektion i Bootcamp i backendutveckling med FastAPI på CoddyKit. Detta är lektion 3 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Bootcamp i backendutveckling med FastAPI, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Bootcamp i backendutveckling med FastAPI innehåller totalt 4 lektioner.
Grunderna i formulärdata
När du fyller i ett webbformulär, till exempel en inloggnings- eller registreringssida, och klickar på "skicka", skickas uppgifterna du angav ofta som formulärdata.
Detta är ett traditionellt sätt för webbläsare att skicka information till en server och skiljer sig från att skicka JSON i en begärans brödtext.
Formulärdata kan skickas på två huvudsakliga sätt:
application/x-www-form-urlencoded: För enkla nyckel-värde-par.multipart/form-data: Används när filer ingår eller för större och mer komplexa data.
FastAPI:s Form-beroende
FastAPI gör det enkelt att hantera formulärdata med hjälp av beroendet Form från fastapi.
Det fungerar på liknande sätt som parametrarna Query eller Path, men talar om för FastAPI att förvänta sig data i begärans brödtext som formulärfält.
Du importerar det så här: from fastapi import FastAPI, Form.
Exempel på en enkel formulärslutpunkt
Vi skapar en slutpunkt som tar emot ett användarnamn och ett lösenord som formulärdata. Observera hur username och password uttryckligen markeras med Form(...).
Detta talar om för FastAPI att tolka dem från formulärets brödtext, inte som JSON eller frågeparametrar.
from fastapi import FastAPI, Form
import uvicorn
app = FastAPI()
@app.post("/login/")
async def login(username: str = Form(...), password: str = Form(...)):
return {"username": username, "message": "Login successful!"}
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=8000)Arbeta med formulärdata
Du kan testa den här slutpunkten med verktyg som curl eller genom att skapa ett enkelt HTML-formulär. Flaggan -d i curl skickar formulärdata.
Se till att FastAPI-applikationen från föregående scen körs!
curl -X POST "http://127.0.0.1:8000/login/" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "username=coddy&password=secret"Filuppladdningar förklarade
Att ladda upp filer, till exempel bilder, dokument eller videor, är en vanlig uppgift på webben. Den här typen av data skickas med kodningen multipart/form-data.
FastAPI tillhandahåller särskilda verktyg för att hantera dessa uppladdningar effektivt, så att du kan komma åt filinnehåll och metadata.
FastAPI:s UploadFile
För filuppladdningar använder FastAPI klassen UploadFile (från fastapi) tillsammans med beroendet File.
När du deklarerar en parameter med File(...) och anger typen UploadFile hanterar FastAPI filströmmen.
filename: Namnet på den uppladdade filen.content_type: Filens MIME-typ (t.ex.image/jpeg).file: Ett SpooledTemporaryFile-objekt som låter dig läsa innehållet.
from fastapi import FastAPI, File, UploadFile
import uvicorn
app = FastAPI()
@app.post("/uploadfile/")
async def create_upload_file(file: UploadFile = File(...)):
return {"filename": file.filename, "content_type": file.content_type}
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=8000)Spara en uppladdad fil
När du har tagit emot en UploadFile kan du läsa innehållet och spara det på en lokal disk eller i molnlagring. Så här sparar du den lokalt.
Kom ihåg att hantera eventuella fel under filåtgärder.
from fastapi import FastAPI, File, UploadFile
import uvicorn
import shutil
import os
app = FastAPI()
# Ensure the 'files' directory exists
os.makedirs("files", exist_ok=True)
@app.post("/uploadandsave/")
async def upload_and_save_file(file: UploadFile = File(...)):
file_location = f"files/{file.filename}"
with open(file_location, "wb+") as file_object:
shutil.copyfileobj(file.file, file_object)
return {"message": f"File '{file.filename}' saved at '{file_location}'"}
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=8000)Ladda upp flera filer
Vad gör du om du behöver ladda upp flera filer samtidigt? FastAPI stöder detta genom att låta dig definiera en parameter som en lista med UploadFile.
Varje fil i listan blir ett UploadFile-objekt som du sedan kan bearbeta individuellt.
from fastapi import FastAPI, File, UploadFile
from typing import List
import uvicorn
app = FastAPI()
@app.post("/uploadmultiple/")
async def create_upload_files(files: List[UploadFile] = File(...)):
uploaded_filenames = [file.filename for file in files]
return {"filenames": uploaded_filenames, "message": "Files received!"}
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=8000)Spara flera uppladdningar
På samma sätt som med enstaka filer kan du iterera över listan med UploadFile-objekt och spara varje fil. Detta är användbart för fotogallerier eller dokumentuppladdningar.
Se alltid till att ha korrekt felhantering och säker lagring av filer i en verklig applikation.
from fastapi import FastAPI, File, UploadFile
from typing import List
import uvicorn
import shutil
import os
app = FastAPI()
# Ensure the 'files' directory exists
os.makedirs("files", exist_ok=True)
@app.post("/uploadandsavemultiple/")
async def upload_and_save_multiple_files(files: List[UploadFile] = File(...)):
saved_files = []
for file in files:
file_location = f"files/{file.filename}"
with open(file_location, "wb+") as file_object:
shutil.copyfileobj(file.file, file_object)
saved_files.append(file.filename)
return {"message": f"Successfully uploaded: {', '.join(saved_files)}"}
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=8000)Kontroll av formulär och filer
Du har lärt dig att hantera formulärdata och filuppladdningar. Nu testar vi dina kunskaper!
Lektionssammanfattning
Bra jobbat! I den här lektionen har du lärt dig att hantera traditionella formulärdata och robusta filuppladdningar i FastAPI.
- Vi använde
Form(...)för enkla nyckel-värde-fält i formulär. - Vi utforskade
UploadFileochFile(...)för uppladdning av enstaka och flera filer. - Du lärde dig att spara uppladdade filer på din server.
Dessa tekniker är avgörande för att bygga interaktiva webbapplikationer. Fortsätt öva!
Lär dig Bootcamp i backendutveckling med FastAPI med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 21
- Lektioner
- 84
Vanliga frågor
Är lektionen ”Formulärdata och filuppladdningar” gratis?
Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Bootcamp i backendutveckling med FastAPI, inklusive ”Formulärdata och filuppladdningar”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Bootcamp i backendutveckling med FastAPI innehåller totalt 4 lektioner.
Vad lär jag mig i ”Formulärdata och filuppladdningar”?
Hantera traditionell HTML-formulärdata och implementera filuppladdningar med FastAPI:s inbyggda funktioner. Ni övar på Bootcamp i backendutveckling med FastAPI med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig Bootcamp i backendutveckling med FastAPI?
Du behöver inga förkunskaper. Utbildningen i Bootcamp i backendutveckling med FastAPI på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 3 av 4.
Hur lång tid tar lektionen ”Formulärdata och filuppladdningar”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här Bootcamp i backendutveckling med FastAPI-lektionen?
Ja. Varje Bootcamp i backendutveckling med FastAPI-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Pydantic-modeller för request body
- Svarmodeller och statuskoder
- Formulärdata och filuppladdningar
- Headers, cookies och anpassade svar