MEDIA_ROOT og filuploads
Modtag og gem filer, som brugerne uploader
MEDIA_ROOT og filuploads er en gratis Django Academy-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 Django Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Django Academy-kurset indeholder 4 lektioner i alt.
Statiske filer kontra mediefiler
Statiske filer følger med din kode. Mediefiler uploades af dine brugere under kørsel, f.eks. avatarer eller dokumenter, og de skal have deres eget sted.
Indstillingen MEDIA_ROOT
MEDIA_ROOT er den absolutte mappe på disken, hvor Django gemmer alle uploadede filer. Den ligger uden for dit kildekodetræ.
MEDIA_ROOT = BASE_DIR / 'media'Indstillingen MEDIA_URL
MEDIA_URL er det offentlige præfiks, som browsere bruger til at anmode om en uploadet fil, ligesom STATIC_URL gør for statiske aktiver.
MEDIA_URL = '/media/'Tilføj et FileField
Hvis du vil acceptere en upload, skal du give din model et FileField. Django gemmer filen på disken og beholder kun dens sti i databasen.
class Resume(models.Model):
doc = models.FileField(upload_to='resumes/')Stien upload_to
Argumentet upload_to er en undermappe under MEDIA_ROOT. Brug det til at holde uploads organiseret, f.eks. ved at samle alle CV'er.
Dynamisk upload_to
Giv upload_to en funktion, når stien skal afhænge af instansen, f.eks. for at placere filer i mapper efter bruger.
def user_dir(instance, filename):
return f'user_{instance.user.id}/{filename}'Formularer skal have enctype
En HTML-formular, der uploader filer, skal indstille enctype til multipart/form-data, ellers sender browseren slet ingen filbytes.
<form method="post" enctype="multipart/form-data">Læs request.FILES
Uploadede bytes kommer ikke ind i request.POST. De lander i request.FILES, som du giver videre til din formular for at binde dem.
form = ResumeForm(request.POST, request.FILES)Hent URL'en
Når filen er gemt, har hvert filfelt en .url-egenskab, som opbygger det MEDIA_URL-link, du indsætter i en skabelon.
<a href="{{ resume.doc.url }}">Download</a>Valider uploads
Stol aldrig på rå uploads. Begræns filstørrelse og -type i formularens clean-metode for at holde skadelige filer ude. 🔒
Hold mediefiler private
MEDIA_ROOT skal ligge uden for dit repository og må aldrig leveres af collectstatic. Brugerfiler og kode forbliver tydeligt adskilt.
Hurtigt tjek
Lad os se på, hvor data fra en uploadet fil ankommer i en visning.
Opsummering
Du lærte, at MEDIA_ROOT gemmer brugeruploads, at FileField med upload_to organiserer dem, og at request.FILES indeholder bytesene. 📁
Lær Python 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
- 30
- Lektioner
- 120
Ofte stillede spørgsmål
Er lektionen “MEDIA_ROOT og filuploads” gratis?
Ja — alle 3 lektioner i læringssporet Django Academy, inklusive “MEDIA_ROOT 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. Django Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “MEDIA_ROOT og filuploads”?
Modtag og gem filer, som brugerne uploader Du øver dig i Django Academy 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å Django Academy?
Der kræves ingen tidligere erfaring. Django Academy 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 “MEDIA_ROOT 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 Django Academy-lektion?
Ja. Alle Django Academy-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
- STATICFILES og static-tagget
- collectstatic til produktion
- MEDIA_ROOT og filuploads
- ImageField og visning af uploads