Subir medios en Django

Salman Mehmood 20 junio 2023
Subir medios en Django

En este artículo de demostración, veremos una breve introducción sobre los archivos multimedia y también veremos cómo podemos operar archivos multimedia en el proyecto Django.

Cargue medios usando MEDIA_ROOT y MEDIA_URL en Django

Django, por defecto, tiene una forma estándar de manejar archivos en el sistema de archivos local.

Si alguna vez revisó su configuración en el proyecto Django, probablemente haya visto MEDIA_ROOT y MEDIA_URL, y en otro proyecto, probablemente haya visto dónde tiene acceso a los archivos en MEDIA_URL.

Así que ahora cubriremos cómo configurarlo en su proyecto Django.

Por ejemplo, tenemos el proyecto Demo y, dentro de él, tenemos una aplicación de documentos. Si miramos el modelo interior, veremos el modelo del documento con un campo título y un campo archivo.

En el campo archivo, tenemos el argumento de la palabra clave upload_to igual a los documentos, lo que significa donde se cargan los archivos. Queremos poner todos los archivos de este objeto dentro de una subcarpeta de documentos.

Código:

from django.db import models


class Document(models.Model):
    title = models.CharField(max_length=128, blank=True)
    file = models.FileField(upload_to="documents", max_length=200)

Entonces, lo primero que necesitamos para comenzar nuestra configuración es abrir nuestro settings.pys.

Si está en la parte superior de su configuración, verá una base o una constante. Esto llega a la raíz de nuestro proyecto y nos permite configurar una ruta basada.

Código:

BASE_DIR = Path(__file__).resolve().parent.parent

Si saltamos al final de nuestro archivo setting.py, comenzaremos con MEDIA_ROOT y estableceremos os.path.join. Luego uniremos BASE_DIR como medio, lo que significa que definiremos la carpeta de medios en nuestro proyecto, donde cargaremos todos nuestros archivos.

A continuación, configuraremos nuestro MEDIA_URL, para que Django pueda construir correctamente nuestras URL. Esto también significa que los medios serán lo primero que veamos al final de nuestro nombre de dominio para acceder al contenido subido por el usuario.

Código:

# Manage media
import os

MEDIA_ROOT = os.path.join(BASE_DIR, "media")
MEDIA_URL = "/media/"

Lo siguiente que debemos configurar es nuestro enrutamiento de URL para verlos correctamente en nuestra máquina local con la ayuda del archivo urls.py. Entonces, necesitamos abrir nuestro urls.py, llamar a un método static() y usar nuestra configuración para MEDIA_URL y MEDIA_ROOT.

Necesitaremos un archivo estático; luego, el archivo urls.py sabrá dónde construir una URL adecuada para obtener localmente.

El método estático genera las URL correctamente. Necesitamos importar nuestra configuración porque lo interesante de este método estático es que solo funcionará localmente, no en producción.

Lo que significa que cuando tiene una depuración establecida en False en producción, esto no funcionará. Debe configurar correctamente el servidor web que está utilizando para servir su carpeta de medios correctamente.

Código:

from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static


urlpatterns = [
    path("admin/", admin.site.urls),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

Lo último que debemos hacer es crear una carpeta de medios en la raíz de nuestro proyecto y ocuparnos de eso creando una carpeta de documentos dentro de nuestra carpeta de medios.

Si vamos a nuestro panel de administración de Django e intentamos cargar una nueva imagen, entonces podemos cargar un archivo. Después de cargar, cuando mire esta imagen en su carpeta de documentos, verá que se cargó correctamente.

Ahora tenemos una buena introducción a la configuración de la URL de medios en la raíz de medios. Cuando los usuarios cargan archivos en su sistema, el backend sabe dónde colocarlos y dónde extraerlos.

Salman Mehmood avatar Salman Mehmood avatar

Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.

LinkedIn