Django Academy · Lección

MEDIA_ROOT y cargas de archivos

Acepte y almacene archivos cargados por los usuarios

Lección 3 de 413 pasos

MEDIA_ROOT y cargas de archivos es una lección gratuita de Django Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Django Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Django Academy incluye 4 lecciones en total.

Partes de esta lección aún no han sido traducidas y se muestran en inglés.

Static vs Media

Static files ship with your code. Media files are uploaded by your users at runtime, like avatars or documents, and they need their own home.

The MEDIA_ROOT Setting

MEDIA_ROOT is the absolute folder on disk where Django saves every uploaded file. It lives outside your source code tree.

MEDIA_ROOT = BASE_DIR / 'media'

The MEDIA_URL Setting

MEDIA_URL is the public prefix browsers use to request an uploaded file, just like STATIC_URL does for static assets.

MEDIA_URL = '/media/'

Add a FileField

To accept an upload, give your model a FileField. Django stores the file on disk and keeps only its path in the database.

class Resume(models.Model):
    doc = models.FileField(upload_to='resumes/')

The upload_to Path

The upload_to argument is a subfolder under MEDIA_ROOT. Use it to keep uploads tidy, like grouping all resumes together.

Dynamic upload_to

Pass a function to upload_to when the path should depend on the instance, such as foldering files per user.

def user_dir(instance, filename):
    return f'user_{instance.user.id}/{filename}'

Forms Need enctype

An HTML form that uploads files must set enctype to multipart/form-data, or the browser sends no file bytes at all.

<form method="post" enctype="multipart/form-data">

Read request.FILES

Uploaded bytes do not arrive in request.POST. They land in request.FILES, which you pass into your form to bind them.

form = ResumeForm(request.POST, request.FILES)

Get the URL

Once saved, every file field exposes a .url property that builds the MEDIA_URL link you drop into a template.

<a href="{{ resume.doc.url }}">Download</a>

Validate Uploads

Never trust raw uploads. Limit file size and type in your form's clean method to keep malicious files out. 🔒

Keep Media Private

MEDIA_ROOT should sit outside your repo and never be served by collectstatic. User files and code stay clearly separate.

Quick Check

Let us check where uploaded file data arrives in a view.

Recap

You learned that MEDIA_ROOT stores user uploads, that FileField with upload_to organizes them, and that request.FILES carries the bytes. 📁

Gratis para empezar

Aprende Python con un tutor de IA — gratis

Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.

Cursos
30
Lecciones
120

Preguntas frecuentes

¿La lección «MEDIA_ROOT y cargas de archivos» es gratis?

Sí — el texto completo de «MEDIA_ROOT y cargas de archivos» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Django Academy, actualiza a CoddyKit PRO. El curso de Django Academy incluye 4 lecciones en total.

¿Qué aprenderé en «MEDIA_ROOT y cargas de archivos»?

Acepte y almacene archivos cargados por los usuarios Practicas Django Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Django Academy?

No se requiere experiencia previa. Django Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.

¿Cuánto tiempo toma la lección «MEDIA_ROOT y cargas de archivos»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Django Academy?

Sí. Cada lección de Django Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. STATICFILES y la etiqueta static
  2. collectstatic para producción
  3. MEDIA_ROOT y cargas de archivos
  4. ImageField y servicio de cargas
← Volver a Django Academy