Django Academy · Lektion

MEDIA_ROOT og filuploads

Modtag og gem filer, som brugerne uploader

Lektion 3 af 413 trin

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. 📁

Gratis at komme i gang

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

  1. STATICFILES og static-tagget
  2. collectstatic til produktion
  3. MEDIA_ROOT og filuploads
  4. ImageField og visning af uploads
← Tilbage til Django Academy