BorrowBits - ciencia y tecnología

Django Forms ¿Conviene siempre usarlos?

Los Forms son 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.

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.

PedroSP

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.

15 comentarios

  • 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.

  • 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.

  • “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

    • 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”.

      • 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…

      • 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…

  • 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 🙂

    • 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.

      • 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

  • 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

Suscríbete

¡Sácale el máximo partido a BBits!

Introduce tu dirección de correo electrónico para seguir este Blog y recibir por email las nuevas publicaciones, si has leído y aceptas las Políticas de Privacidad, Cookies y Aviso Legal.

Recíbelo gratis al suscribirte

Webs amigas

  • Frikilogia.- Blog Multi-Tematico orientado a todos los campos del frikismo.
  • Meridiem90.tv.- Mira la TV gratis en HD. Canal Plus y Gol TV, todo el futbol desde tu navegador.
  • JITKey.- Startup enfocada en la gestión de alojamientos turísticos.

Bits del pasado

Síguenos en FB