Cargando

Ir a contenido

X

 


Django - Manejo de Archivos

En este tutorial veremos algunos métodos que tiene Django para administrar y manejar los archivos y su incorporación en los modelos.


Escrito por mar 09 2014 06:09


Dentro de las aplicaciones no siempre vamos a guardar elementos que son propios de Base de Datos, en este caso nos referimos a los archivos, como PDF, XLS, imagen, etc. Claro existe la posibilidad de guardar el archivo como binario en Base de Datos, sin embargo, esta práctica no es la adecuada, ya que genera una carga adicional para consultarlos y mostrarlos, además de dificultar el proceso de respaldo ya que hace que en una aplicación de mediano tamaño la base de datos alcance un peso considerable.

Para el manejo de los archivos Django cuenta con un tipo de campo especial, que al declararlo en el modelo nos permite acceder a diferentes métodos que facilitaran el manejo de los archivos en nuestra aplicación.

Campo FileField

Como mencionamos anteriormente tenemos un tipo de campo especifico con el cual Django hace el manejo de archivos, dicho tipo de campo es FileField, este campo tiene métodos específicos para almacenar los archivos y su procesamiento, tenemos un tipo de campo que hereda gran parte de su funcionalidad de FileField, este es el ImageField, que como su nombre indica es especial para el manejo de imágenes.

Métodos

A continuación vamos a describir de forma sencilla y detallada algunos de los métodos más importantes con los que contamos en el tipo de campo FileField.

get_directory_name(self )

Este método simplemente retorna la ruta relativa que será almacenada en la Base de Datos junto con el nombre del archivo, por defecto este método revisa el atributo upload_to del campo para determinar el directorio, inclusive las subclases respetan este comportamiento, sin embargo al hacer una subclase podemos determinar cómo se utilice el atributo

get_filename(self, filename)

Este método funciona de forma similar al anterior solo que su foco cambia de la ruta al nombre del archivo, lo que hace es recibir el nombre del archivo y lo transforma a la forma en que será almacenado en Base de Datos, si necesitamos hacer alguna personalización para cambiar el nombre del archivo en una estructura especifica o generar una extensión de archivo particular, al hacer una subclase debemos buscar este método para hacer el cambio.

save_form_data(self, instance, data)

Este es un método utilitario que se utiliza para los formularios, sin embargo podemos utilizarlo de forma de atajo para almacenar los archivos, para ello acepta la instancia del modelo, además de la información del archivo, de esta forma el método extrae la información necesaria que requiere para hacer la subida del archivo.

delete_file(self, instance, sender)

Este método permite la eliminación del archivo que hayamos subido previamente, a pesar que parece ser una forma simple de manejar esta tarea, realmente es un mecanismo un poco más complejo debido al argumento sender que espera como parámetro, no está hecho para ser llamado individualmente.

Vamos a ver una imagen de cómo trabaja este método para hacernos una visión más clara de lo que estamos hablando:

django_manejo_archivos.jpg


Con esto terminamos este tutorial, gracias al cual tenemos una idea más clara de cómo podemos manejar los archivos en el modelo en Django gracias al campo FileField y sus métodos.
¿Te ha gustado y ayudado este Tutorial?
Puedes premiar al autor pulsando este botón para darle un punto positivo


AYUDA A MEJORAR ESTE TUTORIAL!

¿Quieres ayudarnos a mejorar este tutorial más? Puedes enviar tu Revisión con los cambios que considere útiles. Ya hay 0 usuario que han contribuido en este tutorial al enviar sus Revisiones. ¡Puedes ser el próximo!


Tutoriales Relacionados



Sin comentarios, sé el primero!

No esperes más y entra en Solvetic
Deja tus comentarios y aprovecha las ventajas de la cuenta de usuario ¡Únete!
-
VOTA
5
0%
4
0%
3
0%
2
0%
1
0%

  Información

  •   Publicado mar 09 2014 06:09
  •   Actualizado mar 09 2014 06:10
  •   Visitas 2K
  •   Nivel
    Avanzado