MEDIA_ROOT och filuppladdningar
Ta emot och lagra filer som användare laddar upp
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. 📁
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
- STATICFILES och static-taggen
- collectstatic för produktion
- MEDIA_ROOT och filuppladdningar
- ImageField och visning av uppladdningar