Bootcamp i FastAPI-backendudvikling · Lektion

Formulardata og filuploads

Håndtér traditionelle HTML-formulardata, og implementér filuploads ved hjælp af FastAPI's indbyggede funktioner.

Lektion 3 af 411 trin

Formulardata og filuploads er en gratis Bootcamp i FastAPI-backendudvikling-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Bootcamp i FastAPI-backendudvikling, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Bootcamp i FastAPI-backendudvikling-kurset indeholder 4 lektioner i alt.

Grundlæggende om formulardata

Når du udfylder en webformular (f.eks. en login- eller registreringsside) og klikker på "send", bliver de data, du indtastede, ofte sendt som formulardata.

Det er en traditionel måde, hvorpå browsere sender oplysninger til en server, og den adskiller sig fra at sende JSON i en forespørgselskrop.

Formulardata kan sendes på to primære måder:

  • application/x-www-form-urlencoded: Til simple nøgleværdi-par.
  • multipart/form-data: Bruges, når der indgår filer, eller til større og mere komplekse data.

FastAPIs Form-afhængighed

FastAPI gør det nemt at håndtere formulardata ved hjælp af Form-afhængigheden fra fastapi.

Den fungerer på samme måde som parametrene Query eller Path, men fortæller FastAPI, at dataene skal forventes i forespørgselskroppen som formularfelter.

Du importerer den sådan her: from fastapi import FastAPI, Form.

Eksempel på et grundlæggende formularendepunkt

Lad os oprette et endepunkt, der accepterer et brugernavn og en adgangskode som formulardata. Bemærk, hvordan username og password eksplicit markeres med Form(...).

Det fortæller FastAPI, at de skal fortolkes fra formularens krop og ikke som JSON eller forespørgselsparametre.

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)

Arbejde med formulardata

Du kan teste dette endepunkt med værktøjer som curl eller ved at oprette en simpel HTML-formular. Flaget -d i curl sender formulardata.

Sørg for, at din FastAPI-applikation fra den forrige scene kører!

curl -X POST "http://127.0.0.1:8000/login/" \
     -H "Content-Type: application/x-www-form-urlencoded" \
     -d "username=coddy&password=secret"

Forklaring af filuploads

Upload af filer (f.eks. billeder, dokumenter eller videoer) er en almindelig webopgave. Denne type data sendes ved hjælp af kodningen multipart/form-data.

FastAPI tilbyder særlige værktøjer til effektiv håndtering af disse uploads, så du kan få adgang til filindhold og metadata.

FastAPIs UploadFile

Til filuploads bruger FastAPI klassen UploadFile (fra fastapi) sammen med afhængigheden File.

Når du erklærer en parameter med File(...) og angiver dens type som UploadFile, håndterer FastAPI filstrømmen.

  • filename: Navnet på den uploadede fil.
  • content_type: Filens MIME-type (f.eks. image/jpeg).
  • file: Et SpooledTemporaryFile-objekt, som giver dig mulighed for at læse indholdet.
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)

Lagring af én uploadet fil

Efter modtagelse af en UploadFile kan du læse dens indhold og gemme det på en lokal disk eller i cloudlagring. Sådan gemmer du den lokalt.

Husk at håndtere mulige fejl under filhandling.

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)

Upload af flere filer

Hvad gør du, hvis du skal uploade flere filer på én gang? FastAPI understøtter dette ved at lade dig definere en parameter som en liste af UploadFile.

Hver fil på listen er et UploadFile-objekt, som du derefter kan behandle individuelt.

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)

Lagring af flere uploads

Ligesom med enkeltfiler kan du gennemløbe listen med UploadFile-objekter og gemme hver enkelt. Det er nyttigt til fotogallerier eller upload af dokumenter.

Sørg altid for korrekt fejlhåndtering og sikker lagring af filer i en rigtig 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)

Tjek af formularer og filer

Du har lært om håndtering af formulardata og filuploads. Lad os teste din forståelse!

Opsummering af lektionen

Godt arbejde! I denne lektion lærte du grundigt, hvordan du håndterer traditionelle formulardata og robuste filuploads i FastAPI.

  • Vi brugte Form(...) til simple nøgleværdi-felter i formularer.
  • Vi undersøgte UploadFile og File(...) til upload af én eller flere filer.
  • Du lærte at gemme uploadede filer på din server.

Disse teknikker er afgørende for at bygge interaktive webapplikationer. Bliv ved med at øve dig!

Gratis at komme i gang

Lær Bootcamp i FastAPI-backendudvikling med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
21
Lektioner
84

Ofte stillede spørgsmål

Er lektionen “Formulardata og filuploads” gratis?

Ja — alle 3 lektioner i læringssporet Bootcamp i FastAPI-backendudvikling, inklusive “Formulardata og filuploads”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Bootcamp i FastAPI-backendudvikling-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Formulardata og filuploads”?

Håndtér traditionelle HTML-formulardata, og implementér filuploads ved hjælp af FastAPI's indbyggede funktioner. Du øver dig i Bootcamp i FastAPI-backendudvikling med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Bootcamp i FastAPI-backendudvikling?

Der kræves ingen tidligere erfaring. Bootcamp i FastAPI-backendudvikling på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.

Hvor lang tid tager lektionen “Formulardata og filuploads”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Bootcamp i FastAPI-backendudvikling-lektion?

Ja. Alle Bootcamp i FastAPI-backendudvikling-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Pydantic-modeller til request body
  2. Response-modeller og statuskoder
  3. Formulardata og filuploads
  4. Headers, cookies og brugerdefinerede responser
← Tilbage til Bootcamp i FastAPI-backendudvikling