MEDIA_ROOT en bestandsuploads
Door gebruikers geüploade bestanden accepteren en opslaan
MEDIA_ROOT en bestandsuploads is een gratis Django Academy-les op CoddyKit. Dit is les 3 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Django Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Django Academy bevat in totaal 4 lessen.
Statisch versus media
Statische bestanden worden met je code meegeleverd. Mediabestanden worden tijdens runtime door gebruikers geüpload, zoals avatars of documenten, en hebben een eigen opslagplaats nodig.
De instelling MEDIA_ROOT
MEDIA_ROOT is de absolute map op schijf waarin Django elk geüpload bestand opslaat. Deze map staat buiten je broncodemap.
MEDIA_ROOT = BASE_DIR / 'media'De instelling MEDIA_URL
MEDIA_URL is het openbare voorvoegsel dat browsers gebruiken om een geüpload bestand op te vragen, net zoals STATIC_URL dat doet voor statische assets.
MEDIA_URL = '/media/'Een FileField toevoegen
Geef je model een FileField om uploads te accepteren. Django slaat het bestand op schijf op en bewaart alleen het pad in de database.
class Resume(models.Model):
doc = models.FileField(upload_to='resumes/')Het pad upload_to
Het argument upload_to is een submap onder MEDIA_ROOT. Gebruik het om uploads overzichtelijk te houden, bijvoorbeeld door alle cv's bij elkaar te zetten.
Dynamische upload_to
Geef een function door aan upload_to als het pad afhankelijk moet zijn van de instantie, bijvoorbeeld om bestanden per gebruiker in aparte mappen te plaatsen.
def user_dir(instance, filename):
return f'user_{instance.user.id}/{filename}'Formulieren hebben enctype nodig
Een HTML-formulier dat bestanden uploadt, moet enctype instellen op multipart/form-data. Anders verstuurt de browser helemaal geen bestandsbytes.
<form method="post" enctype="multipart/form-data">Lees request.FILES
Geüploade bytes komen niet aan in request.POST. Ze komen terecht in request.FILES, dat je aan je formulier doorgeeft om de bestanden eraan te koppelen.
form = ResumeForm(request.POST, request.FILES)Haal de URL op
Nadat het bestand is opgeslagen, biedt elk bestandsveld een eigenschap .url die de MEDIA_URL-koppeling opbouwt die je in een template plaatst.
<a href="{{ resume.doc.url }}">Download</a>Uploads valideren
Vertrouw onbewerkte uploads nooit. Beperk de bestandsgrootte en het type in de methode clean van je formulier om schadelijke bestanden buiten te houden. 🔒
Houd media privé
MEDIA_ROOT hoort buiten je repository te staan en mag nooit door collectstatic worden geleverd. Gebruikersbestanden en code blijven zo duidelijk gescheiden.
Korte controle
Controleer waar geüploade bestandsgegevens in een weergave binnenkomen.
Samenvatting
Je hebt geleerd dat MEDIA_ROOT uploads van gebruikers opslaat, dat FileField met upload_to ze ordent en dat request.FILES de bytes bevat. 📁
Leer Python met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 30
- Lessen
- 120
Veelgestelde vragen
Is de les “MEDIA_ROOT en bestandsuploads” gratis?
Ja — je kunt hier op het web alle 3 lessen van het leerpad Django Academy, waaronder “MEDIA_ROOT en bestandsuploads”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus Django Academy bevat in totaal 4 lessen.
Wat leer ik in “MEDIA_ROOT en bestandsuploads”?
Door gebruikers geüploade bestanden accepteren en opslaan Je oefent met Django Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met Django Academy te beginnen?
Ervaring vooraf is niet nodig. Django Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 3 van 4.
Hoe lang duurt de les “MEDIA_ROOT en bestandsuploads”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over Django Academy?
Ja. Elke les over Django Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- STATICFILES en de static-tag
- collectstatic voor productie
- MEDIA_ROOT en bestandsuploads
- ImageField en uploads aanbieden