MEDIA_ROOT e caricamento di file
Accettare e memorizzare i file caricati dagli utenti
MEDIA_ROOT e caricamento di file è una lezione Django Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Django Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Django Academy include 4 lezioni in totale.
Statici e media
I file statici vengono distribuiti insieme al codice. I media files vengono caricati dagli utenti durante l'esecuzione, ad esempio avatar o documenti, e hanno bisogno di uno spazio dedicato.
L'impostazione MEDIA_ROOT
MEDIA_ROOT è la cartella assoluta sul disco in cui Django salva ogni file caricato. Si trova al di fuori dell'albero del codice sorgente.
MEDIA_ROOT = BASE_DIR / 'media'L'impostazione MEDIA_URL
MEDIA_URL è il prefisso pubblico che i browser usano per richiedere un file caricato, proprio come STATIC_URL per gli asset statici.
MEDIA_URL = '/media/'Aggiungere un FileField
Per accettare un caricamento, aggiungete al modello un FileField. Django salva il file sul disco e conserva nel database solo il relativo percorso.
class Resume(models.Model):
doc = models.FileField(upload_to='resumes/')Il percorso upload_to
L'argomento upload_to è una sottocartella all'interno di MEDIA_ROOT. Usatelo per tenere ordinati i caricamenti, ad esempio raggruppando tutti i curriculum.
upload_to dinamico
Passate una function a upload_to quando il percorso deve dipendere dall'istanza, ad esempio per organizzare i file in cartelle per utente.
def user_dir(instance, filename):
return f'user_{instance.user.id}/{filename}'I form richiedono enctype
Un form HTML che carica file deve impostare enctype su multipart/form-data, altrimenti il browser non invia alcun byte del file.
<form method="post" enctype="multipart/form-data">Leggere request.FILES
I byte caricati non arrivano in request.POST. Vengono inseriti in request.FILES, che dovete passare al form per associarli.
form = ResumeForm(request.POST, request.FILES)Ottenere l'URL
Dopo il salvataggio, ogni campo file espone una proprietà .url che costruisce il collegamento MEDIA_URL da inserire in un template.
<a href="{{ resume.doc.url }}">Download</a>Convalidare i caricamenti
Non fidatevi mai dei caricamenti grezzi. Limitate dimensione e tipo di file nel metodo clean del form per tenere fuori i file dannosi. 🔒
Mantenere privati i media
MEDIA_ROOT deve trovarsi outside del repository e non deve mai essere servita da collectstatic. I file degli utenti e il codice restano chiaramente separati.
Verifica rapida
Verifichiamo dove arrivano i dati dei file caricati in una view.
Riepilogo
Ha imparato che MEDIA_ROOT memorizza i caricamenti degli utenti, che FileField con upload_to li organizza e che request.FILES contiene i byte. 📁
Impara Python con un tutor IA — gratis
Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.
- Corsi
- 30
- Lezioni
- 120
Domande Frequenti
La lezione «MEDIA_ROOT e caricamento di file» è gratuita?
Sì — il testo completo di «MEDIA_ROOT e caricamento di file» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Django Academy, passa a CoddyKit PRO. Il corso Django Academy include 4 lezioni in totale.
Cosa imparerò in «MEDIA_ROOT e caricamento di file»?
Accettare e memorizzare i file caricati dagli utenti Eserciti Django Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Django Academy?
Non è richiesta alcuna esperienza precedente. Django Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.
Quanto tempo richiede la lezione «MEDIA_ROOT e caricamento di file»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Django Academy?
Sì. Ogni lezione Django Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- STATICFILES e il tag static
- collectstatic per la produzione
- MEDIA_ROOT e caricamento di file
- ImageField e pubblicazione dei file caricati