Bootcamp i backendutveckling med FastAPI · Lektion

Formulärdata och filuppladdningar

Hantera traditionell HTML-formulärdata och implementera filuppladdningar med FastAPI:s inbyggda funktioner.

Lektion 3 av 411 steg

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 UploadFile och File(...) 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!

Gratis att börja

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

  1. Pydantic-modeller för request body
  2. Svarmodeller och statuskoder
  3. Formulärdata och filuppladdningar
  4. Headers, cookies och anpassade svar
← Tillbaka till Bootcamp i backendutveckling med FastAPI