Un pequeño e-commerce con Django

Aprovecho una parada en boxes de Lucas para escribir esta columna. Suelen ser unos 20 minutos, aunque últimamente está rebajando todavía más sus tiempos. Así que venga, apurémonos.

Vengo de pasarme… ¿hora y media? con un planificador de cocinas.

Nos mudamos a Augsburgo a principios de octubre, aunque algunas señales me sugieren que esto podría retrasarse algunas semanas, y una de las cosas de las que tenemos que ocuparnos es de comprar una cocina nueva. ¿Alguna vez habéis comprado una cocina? ¿Entera?

En Alemania es común que, cuando la gente se mude, se lleve la cocina. Incluso así, a lo largo de los años y las mudanzas en esta tierra he tenido mucha suerte y nunca he tenido que comprar una. En fin, no podía evitarlo indefinidamente, así que esta vez me toca comprar cocina.

Y hoy he entrado en la página web de XXXLutz, que al parecer venden cocinas, y he estado ocupado con el planificador de cocinas. Qué cosa más chula.

No sé cómo está hecho, pero se le dan las medidas de la habitación y luego se empiezan a meter muebles y se ve todo en tres dimensiones desde el navegador web y es una pasada. De un menú desplegable se van sacando muebles, estanterías, fregaderos… y al cabo de un largo rato se tiene la cocina completa y que se puede ver en 3D. Al final incluso he recibido un plano en PDF. Pasote.

Todavía queda mucho, pues sólo esta semana tenemos que viajar hasta Augsburgo a medir otra vez con más detalle. Luego habrá que quedar con alguien, seguramente online, para ultimar los detalles y luego vendrá el montaje en sí. Y luego encima habrá que pagarla. En fin.

Esta semana he estado avanzando con el curso de creación de aplicaciones web con Django y he empezado el proyecto número dos: un pequeño e-commerce. Es una especie de e-Bay simplificado donde hay subastas y se puede tener una lista de subastas en las que uno está interesado.

En esta ocasión he tenido que apañármelas por fin con la base de datos y los modelos, creando clases para las subastas, los usuarios, etc… Ha sido muy interesante. Me ha servido para darme cuenta de que había mucho de esto que ya sabía de mi anterior trabajo: que la base de datos se organiza en tablas, cómo las tablas se relacionan las unas con las otras, y también algunas técnicas rutinarias a la hora de manejar la información del tipo: entra en esta tabla y sácame todas las entradas del usuario X, y luego las recorres y me las muestras en forma de lista. También esos arrays llenos de objetos. También esas tablas que simplemente relacionan dos tablas.

Por ejemplo, cada usuario tiene una llamada “watchlist”, que es una lista de las subastas que sigue. Así que necesito una tabla usuarios-subastas que tiene tres columnas: un id de la propia tabla, un user_id y un subasta_id. Yo creía que user_id y subasta_id tenía que ser “llaves extranjeras” (¿cómo se les llama a las “foreign keys”?) pero al final sólo he conseguido sacarlo adelante haciendo que sean enteros corrientes y molientes.

Estoy muy pez en estas cosas, pues es la primera vez que diseño las tablas de una base de datos. En mi anterior trabajo sólo las usaba, pero ahora entiendo por ejemplo lo de las migraciones y aquellos scripts que tenía que correr cuando mi colega actualizaba la base de datos.

Y es que este curso y estos proyectos me están haciendo entender cosas que en mi trabajo hacía sin saber cómo funcionaban. Y es muy interesante eso de poder acceder a la base de datos y hacer las consultas y saber cómo mostrar los datos. Las posibilidades son enormes.

Los formularios los he hecho a pelo, como en el curso, que es un trabajazo, pero ya he visto que Django tiene sus clases de formularios y seguramente al terminar el proyecto me anime a rehacerlos usando las mismas.

Lo que sí que he hecho ha sido abrir un repositorio en Git y estoy haciendo mis commits contra el mismo y aprendiendo a gestionar el proyecto de esta manera, que también es nuevo para mí por mi cuenta. En mi trabajo sólo hacía un commit al terminar la tarea completa, que a veces duraba media hora y a veces dos días. Visual Studio Code tiene muy buena integración con Git y lo hace muy fácil.

También me he animado a instalar el plugin de Vim para el VSC. Al principio iba muy de culo pero ya le voy cogiendo el tranquillo y en general voy bastante rápido hasta que quiero hacer alguna combinación complicada y tengo que pararme a pensarlo y hacer varios intentos, pero todo es práctica.

Grosso modo he ido avanzando bien con el proyecto con algún atasco, pero muy gratificante el ir logrando cosas. Ahora tengo que evitar que se guarde una subasta en la watchlist si ya está dentro. Supongo que lo puedo hacer a nivel de base de datos, aunque me pregunto si hay alguna manera de validar la transacción todavía antes de eso.

Y aquí estoy, escribiendo mis funciones en la vista y mis clases en el modelo y sintiéndome la mar de hacker y disfrutándolo mucho. Si hubiera sabido que era algo para mí, que yo también podía aprender estas cosas, hubiera empezado mucho antes. Pero las cosas en la vida llegan cuando estamos preparados, así que bienvenido sea esto ahora.

Por lo demás, Lucas cumplirá su cuarto mes en unos días, así que en breve habrá que ponerse de nuevo con las cartas a los padres para averiguar a qué nos vamos a enfrentar esta vez. El tío está para comérselo, así que se lo perdonamos todo.

Mucho llorar, muchas lágrimas, mucho dolor y retorcimiento, pero cada vez queda menos. Tres semanas sin Fórmula uno, pero qué le vamos a hacer.

Otro día más. Gracias por estar ahí.

Comentarios

7 respuestas a «Un pequeño e-commerce con Django»

  1. Avatar de Adrián
    Adrián

    Buenas,

    Creo que “foreign keys” son “claves foráneas” en castellano 🙂

    Por cierto, ya que me pongo tiquismiquis: los meses (como octubre) en minúscula.

    ¡Buena semana!

    1. Avatar de Javier

      Gracias por la aclaración, Adrián 🙂

      Y gracias también por el tiquismiquismo; lo corrijo.

      ¡Buena semana!

  2. Avatar de Manuel
    Manuel

    Yo he escuchando las dos versiones llaves foráneas y claves foráneas (aunque es cierto que casi siempre uso la expresión en inglés)

    Es curioso, he dejado de usar IDE’s, en mi último trabajo usaba sublime text y ahora directamente trabajo con VIM, no estoy seguro pero me siento más cómodo así.

    1. Avatar de Javier

      Gracias, Manuel.

      Bueno, Sublime Text para mí es más un editor de texto que un IDE. En cuanto a usar Vim para programar, es lo que decía Julia que hacían sus compañeros de trabajo. Yo pienso que lo primero que echaría de menos es el depurador (debugger). En este proyecto sólo lo he usado una vez de momento, pero, cuando me atasco, quiero que esté ahí. Y luego está el tema de tener abiertos varios ficheros a la vez. Apenas me he puesto con ese tema en Vim. ¿Y qué hay del autocompletado? He leído que algo puede hacerse en ese sentido. Por un lado me atrae mucho la idea, pero por el otro pienso que por qué no aprovechar los avances de los últimos 20 años en cuestión de entornos gráficos. ¿Cómo te lo montas tú?

      1. Avatar de Ed
        Ed

        Soy soy del bando clásico de Manuel. Yo uso vim el 95% del tiempo (suelo editar cosas rápidas en caliente sin usar el ratón); me da pereza arrancar el IDE.

        Tambien uso Sublime Text, solo como editor de texto cuando quiero documentar y tener varias pestañas a la vez. No para programar.

        Como IDE uso Visual Studio que me parece espectacular, imprescindible para temas de autocompletado, formateado, abrir directorios de proyectos, para no cometer errores con ficheros yaml (que son muy puñeteros con los espacios), las extensiones para integración con herramientas de terceros y consolas locales (GIT, Atlassian, proveedores de Cloud, contenedores)

  3. Avatar de Manuel
    Manuel

    Es cierto que los IDE facilitan todo bastante, y me parece útil para acelerar la curva de aprendizaje y sobre todo si hay partes del desarrollo que no son tu fuerte (como git). Entiendo que pueda parecer programar con “una mano a la espalda” sin embargo mi configuración está lejos de ser un VIM sin más.

    Uso un setup parecido al que explican en este artículo https://medium.com/@hanspinckaers/setting-up-vim-as-an-ide-for-python-773722142d1d obviamente adaptado a las necesidades particulares de cada proyecto en le que trabajo. Como con las distribuciones de Linux me gusta empezar con la versión más reducida (incluso sin GUI) e instalar solo lo que necesito y eso es algo que hecho de menos con los IDE, instalan un montón de “cosas” que no necesito.

    1. Avatar de Javier

      Gracias por compartirlo con nosotros. Una configuración similar había visto ya por ahí.

      Buf, necesitaría un curso para instalar todo eso, configurarlo y luego usarlo!

Responder a Adrián Cancelar la respuesta