Django Academy · Lektion

MEDIA_ROOT och filuppladdningar

Ta emot och lagra filer som användare laddar upp

Lektion 3 av 413 steg

MEDIA_ROOT och filuppladdningar är en gratis lektion i Django Academy 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 Django Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Django Academy innehåller totalt 4 lektioner.

Statiska filer kontra mediefiler

Statiska filer följer med din kod. Mediefiler laddas upp av användarna under körning, till exempel profilbilder eller dokument, och behöver en egen plats.

Inställningen MEDIA_ROOT

MEDIA_ROOT är den absoluta mappen på disken där Django sparar alla uppladdade filer. Den ligger utanför ditt källkodsträd.

MEDIA_ROOT = BASE_DIR / 'media'

Inställningen MEDIA_URL

MEDIA_URL är det publika prefix som webbläsare använder för att begära en uppladdad fil, på samma sätt som STATIC_URL används för statiska resurser.

MEDIA_URL = '/media/'

Lägg till ett FileField

För att ta emot en uppladdning ger du din modell ett FileField. Django sparar filen på disken och behåller bara sökvägen i databasen.

class Resume(models.Model):
    doc = models.FileField(upload_to='resumes/')

Sökvägen upload_to

Argumentet upload_to är en undermapp under MEDIA_ROOT. Använd det för att hålla uppladdningarna ordnade, till exempel genom att samla alla CV:n på samma plats.

Dynamiskt upload_to

Skicka en funktion till upload_to när sökvägen ska bero på instansen, till exempel för att placera filer i mappar per användare.

def user_dir(instance, filename):
    return f'user_{instance.user.id}/{filename}'

Formulär behöver enctype

Ett HTML-formulär som laddar upp filer måste ange enctype som multipart/form-data, annars skickar webbläsaren inte några fildata alls.

<form method="post" enctype="multipart/form-data">

Läs request.FILES

Uppladdade byte kommer inte in i request.POST. De hamnar i request.FILES, som du skickar till formuläret för att binda dem.

form = ResumeForm(request.POST, request.FILES)

Hämta URL:en

När filen har sparats har varje filfält en egenskap .url som bygger MEDIA_URL-länken som du infogar i en mall.

<a href="{{ resume.doc.url }}">Download</a>

Validera uppladdningar

Lita aldrig på råa uppladdningar. Begränsa filstorlek och filtyp i formulärets clean-metod för att hålla skadliga filer borta. 🔒

Håll mediefiler privata

MEDIA_ROOT ska ligga utanför ditt kodförråd och får aldrig levereras av collectstatic. Användarfiler och kod hålls tydligt åtskilda.

Snabbkontroll

Nu kontrollerar vi var uppladdade fildata hamnar i en vy.

Sammanfattning

Du har lärt dig att MEDIA_ROOT lagrar användaruppladdningar, att FileField tillsammans med upload_to organiserar dem och att request.FILES innehåller bytena. 📁

Gratis att börja

Lär dig Python 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
30
Lektioner
120

Vanliga frågor

Är lektionen ”MEDIA_ROOT och filuppladdningar” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Django Academy, inklusive ”MEDIA_ROOT 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 Django Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”MEDIA_ROOT och filuppladdningar”?

Ta emot och lagra filer som användare laddar upp Ni övar på Django Academy 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 Django Academy?

Du behöver inga förkunskaper. Utbildningen i Django Academy 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 ”MEDIA_ROOT 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 Django Academy-lektionen?

Ja. Varje Django Academy-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. STATICFILES och static-taggen
  2. collectstatic för produktion
  3. MEDIA_ROOT och filuppladdningar
  4. ImageField och visning av uppladdningar
← Tillbaka till Django Academy