Django Forms ¿Conviene siempre usarlos?

Django Forms ¿Conviene siempre usarlos?

Django es un framework de python para desarrollo web muy potente que se viene usando cada vez más. Una de las cosas que más nos llaman la atención es la cantidad de funcionalidades que se pueden obtener automáticamente con poco código que defina nuestro modelo. Quizás la funcionalidad más impactante sea el panel de administración web que se obtiene automáticamente siguiendo muy pocos pasos después de haber definido el modelo de datos, pero también son muy potentes los Forms, clases que se definen en pocas lineas y sirven para generar HTML, validar los datos y crear objetos en la BD con muy poco código.


Los que hemos hecho ya varias aplicaciones web con Django hemos descubierto un extraño comportamiento en nuestra forma de trabajar. Cuando empezamos a hacer una nueva aplicación web, una vez analizado el problema, escribimos el modelo de datos inicial, creamos el fichero admin.py (con el código para generar el panel de administración) y el forms.py (con las clases que usaremos para generar los formularios). Gracias a esto obtenemos una gran velocidad de desarrollo al principio, pero la aplicación va madurando y tenemos que modificar el HTML para que la página quede bien maquetada, con esto ya no necesitamos el HTML generado por el Form. Después viene la validación por JS y los efectos con jQuery sobre el formulario, entonces ya no necesitamos el validador de parte del servidor. Finalmente podemos comprobar que en una aplicación web moderna en producción no nos es muy útil el Form incluso pueden llegar a ser engorrosos.

Esto no significa que los Forms no sirvan para nada, al contrario, para hacer un prototipo rápido y enseñárselo al cliente son muy efectivos dado el poco código ( y por lo tanto tiempo) necesario para crearlos. Otro caso en el que son muy útiles es en el desarrollo de aplicaciones de gestión locales, es decir, que no están en internet. Gracias a Django podemos escribir una aplicación de gestión para una empresa en muy poco rato, que al ser web podrá ser accedida en red local desde cualquier plataforma. En estos casos donde no importa la apariencia si no el modelo de datos y las tablas de la BD tienen muchos datos es justamente donde los forms y el panel de administración de Django juegan su mejor carta. Ya podéis olvidar vuestros conocimientos de SQL y de programación de aplicaciones gráficas, con Django obtendréis unos resultados mejores en un tiempo enormemente inferior.

Si aún no conoces Django, puedes leer algunos tutoriales y en muy poco tiempo estarás creando aplicaciones web con soltura.

Previous Un 'ampli' portátil por menos de 5 euros
Next Hippie 2.0

About author

PedroSP
PedroSP 3 posts

Nací en Ibiza, pero me transladé muy pequeño a Atarfe (Granada). Estudiante de Ingeniería técnica en informática de Sistemas. Defensor a ultranza del software libre, el conocimiento libre y el pensamiento crítico. Amante de las ciencias, la economía, la informática y el mundo de los negocios. Republicano de corazón.

You might also like

Tecnologia & Ciencia 1Comments

Cómo detectar un dispositivo móvil en Django con Mobi

Cuando estamos programando una aplicación web es probable que necesitemos distinguir si el usuario se conecta desde su dispositivo móvil (tablet, smartphone, iphone, etc) o desde un PC. En función

Desarrollo 0 Comentarios

Truco: Actualizar la altura del contenedor de un árbol JSTree

Ya hemos hablado del plugin JSTree en otras ocasiones. Ahora abordarmos un problema muy particular, por lo que no debes seguir leyendo este apunte si no es tu caso (a

Desarrollo 2 Comentarios

Qué es y cómo funciona Symfony2: Conceptos claves

Symfony2 es uno de los Framework más potentes que existen para desarrollar aplicaciones web. Punto. Pero, ¿cómo funciona? ¿Qué es realmente? Con este artículo, pretendo que te quede claro como

15 Comentarios

  1. EDGAR
    diciembre 08, 19:36 Reply

    Pedro Podrias hacer el favor de hacer un post para validar con jquery los formularios? veraz estoy trabajando con forms de django y al renderizar pinto los campos con un snippet entonces estoy muy confundido porque ha llegado la hora de validar campos requeridos mientras se escriben y no tengo idea como trabajarlo de esa forma.por favor podrias ayudar, pienso que hay muchas personas asi que comenzamos con django

  2. samuel
    enero 30, 17:34 Reply

    Umm, no estoy muy de acuerdo con tu post, si dices eso, seguro no has trabajado a fondo con la api de los formularios, yo las uso en mis proyectos modificandolo mediante la api y me resulta mucho mejor que escribir html puro, hasta lo uso con jQuery para validaciones y cosas asi, asi que mejor meterte mas en django :)

    • Pedro Serrano
      enero 31, 14:05 Reply

      A ver, a mi si me dan un diseño ya hecho por un diseñador o grafista o lo que sea, que incluye un formulario con sus clases y demás, y son pocos campos, imagínate “título” y “texto”:
      Me resulta mucho más fácil no usar forms, si no diréctamente desde el views renderizar ese html en el get y recoger los 2 campos en el post, 1 línea para cada uno más lo que necesites de comprobaciones de seguridad.

      Lo he hecho de las 2 maneras, solo llevo año y medio usando Django, y mi opinión es esa, que muchas veces parece que usando forms vas a tardar menos pero luego acabas tardando más, porque siempre hay algo que puede fallarte y te obliga a ponerte a mirar la documentación a ver qué es lo que está pasando. Eso si tienes muchos campos (en una app de gestión por ejemplo) te compensa, pero si vasa tener 2 o 3 campos, a la larga tardas más.

      • edgar
        diciembre 08, 19:37 Reply

        Pedro Podrias hacer el favor de hacer un post para validar con jquery los formularios? veraz estoy trabajando con forms de django y al renderizar pinto los campos con un snippet entonces estoy muy confundido porque ha llegado la hora de validar campos requeridos mientras se escriben y no tengo idea como trabajarlo de esa forma.por favor podrias ayudar, pienso que hay muchas personas asi que comenzamos con django

  3. Anonimo
    octubre 07, 08:15 Reply

    “Después viene la validación por JS y los efectos con jQuery sobre el formulario, entonces ya no necesitamos el validador de parte del servidor”

    Estimado, cualquier código que sea realizado en javascript y que sea cargado por el lado de cliente se puede vulnerar. Solo basta con una consola desarrollador en el navegador para poder borrar todas las validaciones y enviar cualquier cosa. Recomiendo usar los form de django siempre

    • Pedro Serrano
      enero 31, 13:59 Reply

      No me refería a comprobar los campos a modo de seguridad, si no a hacerlo de forma bonita, volviendo a cargar el formulario con los datos que había y poniendo un error en rojo en plan “Email incorrecto”.

      • jorge
        marzo 16, 00:10 Reply

        Doc, como bien has dicho en el lado del servidor sirve para la validación, pero tambien lo puedes usar para devolver los errores por json y mostrarlos como quieras en javascript…

      • jorge
        marzo 16, 00:10 Reply

        Doc, como bien has dicho en el lado del servidor sirve para la validación, pero tambien lo puedes usar para devolver los errores por json y mostrarlos como quieras en javascript…

  4. PedroSP
    julio 08, 22:23 Reply

    No las conocía, me lo anoto y me pongo a mirarlas. Si merecen la pena, escribiré pronto un tutorial.
    Un saludo.

  5. PedroSP
    marzo 27, 22:50 Reply

    Eso se puede hacer sin problemas aunque requiere algunos cambios en la configuración del proyecto y en la configuración del Apache.
    Te haré una explicación resumida aunque en pocos días escribiré una nueva entrada en el blog con un tutorial paso a paso en castellano, porque aunque hay mucha información en inglés en castellano hay poco.
    En primer lugar necesitas desarrollar tu aplicación Django, mucho mejor en local y usando el servidor de desarrollo ( el que se ejecuta con manage.py runserver)
    Luego tienes que llevarte la carpeta con el proyecto al servidor.
    En el servidor necesitarás activar el módulo mod_wsgi de Apache, en algunos servidores como los Debian, podrás instalar el módulo en el sistema (con apt-get por ejemplo) y luego activarlo con a2enmod, pero en muchos servidores tendrás que obtener el código fuente del módulo, compilarlo y ejecutarlo. No tengas miedo con esto último son 3 comandos por ssh.
    Los ficheros estáticos deberás de dejarlos de servir a través de Django y servirlos en una carpeta de acceso público. Además deberás añadir al proyecto un ficherito con la configuración wsgi, hay una plantilla y solo hay que añadirle el path y poco más.

    La configuración del Apache se puede hacer de varias formas, con un host virtual, con un en otro virtualhost que ya exista o con un . La idea es que cuando Apache reciba una URL determinada ejecute el módulo WSGI que a su vez ejecutará el dispatcher de Django ( el que se configura con el fichero urls.py).
    Al principio parece todo muy raro pero cuando se entiende bien lo que se está haciendo es todo muy lógico. Todo se puede aprender en un tarde investigando y leyendo la documentación de Apache y WSGI.

    Espero haberte aclarado algo, pero ya te digo que se puede hacer y que no es difícil, quizás la primera vez cueste un poco más, pero merece la pena ;D
    Un saludo.

    • PaquilloDubois
      marzo 27, 23:31 Reply

      En efecto no parece complicado. De todos modos espero a que publiques el tutorial.

      Gracias.

    • Paquillo Dubois
      julio 03, 16:06 Reply

      Hola Pedro.
      Otra vez me ha picado el gusanillo de Django y he intentado seguir el mini-tuto de tu comentario al post sin éxito.

      ¿Al final hiciste un tutorial más amplio?

      Un saludo.

  6. PaquilloDubois
    marzo 27, 20:34 Reply

    Ante todo, felicitarte por el post y por el blog en general.
    Tengo una duda que me corroe y que me ha desanimado a la hora de seguir programando mis aplicaciones con Django.
    Y es cómo instalarlo en un servidor con Apache para que se ejecute desde una dirección de internet como http://www.ejemplo.com/django/aplicaciones
    Tengo acceso a un servidor pero no tengo experiencia en el tema así que me gustaría estar seguro de cómo se hacer para no romper nada.
    ¿Alguna sugerencia?
    Gracias.

Deja un comentario