API de almacenamiento de archivos

Obtención de la clase de almacenamiento por defecto

Django proporciona formas convenientes para acceder a la clase de almacenamiento por defecto:

storages

Un objeto similar a un diccionario que permite recuperar una instancia de almacenamiento utilizando su alias tal como se define en STORAGES.

storages tiene un atributo backends, que por defecto es el valor bruto proporcionado en STORAGES.

Además, storages proporciona un método create_storage() que acepta el diccionario utilizado en STORAGES para un backend y devuelve una instancia de almacenamiento basada en esa definición del backend. Esto puede ser útil para paquetes terceros que necesitan instanciar almacenes en pruebas:

>>> from django.core.files.storage import storages
>>> storages.backends
{'default': {'BACKEND': 'django.core.files.storage.FileSystemStorage'},
 'staticfiles': {'BACKEND': 'django.contrib.staticfiles.storage.StaticFilesStorage'},
 'custom': {'BACKEND': 'package.storage.CustomStorage'}}
>>> storage_instance = storages.create_storage({"BACKEND": "package.storage.CustomStorage"})
class DefaultStorage[fuente]

La clase DefaultStorage proporciona acceso relajado a la sistema de almacenamiento por defecto tal como se define por el default clave en STORAGES. La clase DefaultStorage utiliza internamente storages.

default_storage

La instancia default_storage es una instancia de la clase DefaultStorage.

La clase del almacenamiento en un sistema de archivos

class FileSystemStorage(location=None, base_url=None, file_permissions_mode=None, directory_permissions_mode=None, allow_overwrite=False)[fuente]

La clase FileSystemStorage implementa el almacenamiento básico de archivos en un sistema de archivos local. Hereda de Storage y proporciona implementaciones para todos los métodos públicos.

Nota

El método FileSystemStorage.delete() no levantará una excepción si el nombre del archivo dado no existe.

location[fuente]

Ruta absoluta al directorio que almacenará los archivos. Por defecto es el valor de tu configuración MEDIA_ROOT.

base_url[fuente]

URL que sirve a los archivos almacenados en esta ubicación. Por defecto es el valor de tu configuración MEDIA_URL.

file_permissions_mode[fuente]

Las permisos del sistema de archivos que recibirá el archivo cuando se guarde. Por defecto son FILE_UPLOAD_PERMISSIONS.

directory_permissions_mode[fuente]

Los permisos del sistema de archivos que recibirá el directorio cuando se guarde. Por defecto son FILE_UPLOAD_DIRECTORY_PERMISSIONS.

allow_overwrite

Bandera para controlar si permite guardar un nuevo archivo sobre uno existente. Por defecto es False.

get_created_time(name)[fuente]

Devuelve una datetime del ctime del sistema, i.e. os.path.getctime(). En algunos sistemas (como Unix), este es el tiempo de la última modificación de metadatos y en otros (como Windows), es el tiempo de creación del archivo.

La clase InMemoryStorage

class InMemoryStorage(location=None, base_url=None, file_permissions_mode=None, directory_permissions_mode=None)[fuente]

La clase InMemoryStorage implementa una almacenamiento de archivos basado en memoria. No tiene persistencia, pero puede ser útil para acelerar las pruebas evitando el acceso a disco.

location[fuente]

Ruta absoluta al nombre del directorio asignado a los archivos. Por defecto es el valor de tu configuración MEDIA_ROOT.

base_url[fuente]

URL que sirve a los archivos almacenados en esta ubicación. Por defecto es el valor de tu configuración MEDIA_URL.

file_permissions_mode[fuente]

Los permisos del sistema de archivos asignados a los archivos, proporcionados para compatibilidad con FileSystemStorage. Por defecto son FILE_UPLOAD_PERMISSIONS.

directory_permissions_mode[fuente]

Los textos traducidos son:

La clase Storage

class Storage[fuente]

La clase Storage proporciona una API estándar para almacenar archivos, junto con un conjunto de comportamientos por defecto que todos los otros sistemas de almacenamiento pueden heredar o sobreescribir según sea necesario.

Nota

Cuando los métodos devuelven objetos datetime ingenuos, el horario efectivo utilizado será el valor actual de os.environ['TZ']; ten en cuenta que esto suele estar configurado desde Django’s TIME_ZONE.

delete(name)[fuente]

Elimina el archivo referenciado por name. Si la eliminación no está soportada en el sistema de almacenamiento objetivo, esto levantará NotImplementedError en su lugar.

exists(name)[fuente]

Devuelve True si un archivo referenciado por el nombre dado ya existe en el sistema de almacenamiento.

get_accessed_time(name)[fuente]

Devuelve una datetime del último tiempo de acceso del archivo. Para los sistemas de almacenamiento incapaces de devolver el último tiempo de acceso, esto levantará NotImplementedError.

Si USE_TZ es True, devuelve un objeto datetime consciente, en caso contrario devuelve un objeto datetime ingenuo en la zona horaria local.

get_alternative_name(file_root, file_ext)[fuente]

Devuelve un nombre de archivo alternativo basado en los parámetros file_root y file_ext, se agrega una cadena alfanumérica aleatoria de 7 caracteres precedida por un guión bajo al nombre del archivo antes de la extensión.

get_available_name(name, max_length=None)[fuente]

Devuelve un nombre de archivo basado en el parámetro name que está libre y disponible para contenido nuevo que pueda escribirse en el sistema de almacenamiento objetivo.

La traducción de los textos es la siguiente:

Si ya existe un archivo con el nombre name, se llama a la función get_alternative_name() para obtener un nombre alternativo.

get_created_time(name)[fuente]

Devuelve una datetime del tiempo de creación del archivo. Para los sistemas de almacenamiento que no puedan devolver el tiempo de creación, esto levantará una excepción NotImplementedError.

Si USE_TZ es True, devuelve un objeto datetime consciente, en caso contrario devuelve un objeto datetime ingenuo en la zona horaria local.

get_modified_time(name)[fuente]

Devuelve un datetime del último tiempo de modificación del archivo. Para los sistemas de almacenamiento que no puedan devolver el último tiempo de modificación, esto levantará una excepción NotImplementedError.

Si USE_TZ es True, devuelve un objeto datetime consciente, en caso contrario devuelve un objeto datetime ingenuo en la zona horaria local.

get_valid_name(name)[fuente]

Devuelve un nombre de archivo basado en el parámetro name que es adecuado para su uso en el sistema de almacenamiento objetivo.

generate_filename(filename)[fuente]

Valida el filename llamando a la función get_valid_name() y devuelve un nombre de archivo para pasar al método save().

El argumento filename puede incluir una ruta como devuelta por la propiedad FileField.upload_to. En ese caso, la ruta no se pasará a la función get_valid_name() pero se prepondrá nuevamente al nombre resultante.

La implementación predeterminada utiliza operaciones de os.path. Sobrescriba este método si eso no es apropiado para su almacenamiento.

listdir(path)[fuente]

Lista el contenido del camino especificado, devolviendo una tupla de 2 elementos; el primer elemento siendo directorios y el segundo elemento siendo archivos. Para los sistemas de almacenamiento que no puedan proporcionar tal lista, esto levantará una NotImplementedError en su lugar.

open(name, mode='rb')[fuente]

Abre el archivo dado por name. Ten en cuenta que aunque el archivo devuelto está garantizado ser un objeto File, podría ser algún subclase en realidad. En el caso de almacenamiento de archivos remotos esto significa que la lectura/escritura podría ser bastante lenta, así que ten cuidado.

path(name)[fuente]

La ruta del sistema de archivos local donde el archivo se puede abrir utilizando la función estándar open() de Python. Para sistemas de almacenamiento que no sean accesibles desde el sistema de archivos local, esto levantará en su lugar NotImplementedError.

save(name, content, max_length=None)[fuente]

Guarda un nuevo archivo utilizando el sistema de almacenamiento, preferiblemente con el nombre especificado. Si ya existe un archivo con este nombre name, el sistema de almacenamiento puede modificar el nombre del archivo como sea necesario para obtener un nombre único. El nombre real del archivo almacenado se devolverá.

El argumento max_length se pasa a get_available_name().

El argumento content debe ser una instancia de django.core.files.File o un objeto similar a archivo que pueda envolverse en File.

size(name)[fuente]

Devuelve el tamaño total, en bytes, del archivo referenciado por name. Para sistemas de almacenamiento que no puedan devolver el tamaño del archivo esto levantará en su lugar NotImplementedError.

url(name)[fuente]

Devuelve la URL donde los contenidos del archivo referenciado por name se pueden acceder. Para sistemas de almacenamiento que no admiten acceso por URL esto levantará en su lugar NotImplementedError.