Entradas

Django: relaciones polimórficas

Imagen
Django tiene varias formas de relacionar modelos entre sí: ForeingKey ManyToManyField OneToManyField Una de las limitaciones de este sistema es que esta relación es estática, solo permite la relación a un tipo de modelo. No permite relaciones polimórficas. Si conoces PHP y el framework Laravel, sabrás a que me refiero. Sin embargo, Django incluye una aplicación llamada "contenttypes" que además de permirte seguir todos los modelos instalados en tu proyecto y un interfaz para trabajar con ellos, permite generar estas relaciones polimórficas llamadas "relaciones genéricas". Ejemplo de relación genérica: Este modelo Comment está referenciando al Post en el que se incluye. ForeingKey es la relación adecuada ya que un comentario sólo pertenece a un post. Pero si quisieramos utilizar este modelo para hacer comentarios sobre otros elemntos que no fueran posts, tendríamos un problema, ya que está asociado directamente a un post. Solución: relaciones gen

Django: Modelos

Imagen
Django implementa su propia herramienta para proporcionar ORM, como lo hace Hibernate por ejemplo para Java. Son herramientas de mapeo objeto-relacional (ORM) que facilitan el mapeo de atributos entre una base de datos relacional tradicional y el modelo de objetos de una aplicación. Ahora veremos como lo hace Django con un sencillo ejemplo. models.py En nuestra aplicación disponemos de un fichero models.py donde definiremos todas nuestras entidades, que mas tarde serán convertidas en tablas. Los identificadores no son necesarios especificarlos. Y las relaciones entre entidades ya las veremos mäs adelante. Con las entidades creadas ahora toca ejecutar los comandos que transformen esa definición en nuestra base de datos. El primero para crear los ficheros de migración. Y una vez tenemos la migración creada, ejecutamos esas migraciones. Verás que otras tablas son creadas adicionalmente, y eso es porque Django proporciona un admin por defecto para la gestión de nuetra base de da

Django: mapping

Imagen
Django utiliza el fichero urls.py de la aplicación para mapear todas las URLs de la misma. Además de conectarlas con nuestras vistas y hacerlas accesibles desde fuera, Django permite no tener que utilizar directamente las urls en nuestros templates sino unos identificadores, haciendo así que si cambiamos en el futuro una URL no tengamos que ir por todos los templates cambiando esa URL. El parámetro en cuestión es " name ". urls.py Primer paso, definimos que URLs necesitamos. Si alguna URL es dinámica lo especificamos con el tag " slug ". El tercer parámetro de render es muy importante por lo que explicaba en el párrafo anterior. views.py Segundo paso, creamos los métodos en el controlador que gestionen las llamadas y hagan el redireccionado adecuado: index.html Este es un ejemplo muy sencillo, los templates y el routing the Django ofrece infinidad de posibilidades. Documentación: https://docs.djangoproject.com/en/4.0/topics/templates/ https:/

Django: primeros pasos

Imagen
Django es uno de los framweworks MVC de desarrollo web para Python más populares. Las principales características de Django son su sencillez y facilidad de uso, la importancia que da a la seguridad evitando a desarrolladores cometer los errores mäs comunes, y que es facilmente escalable. Instalación Muy sencilla, usando pipenv. Ficheros de nuestro proyecto: settings.py : Para controlar la configuración de nuestro proyeco url.py : para asociar vistas (páginas) a urls. wsgi.py : Web Server Gateway Interface. Es la plataforma de implementación principal de Django, el estándar de Python para aplicaciones y servidores web. manage.py : utilizado para ejecutar varios comandos de django, y es lo que se ejecuta cuando arrancamos el servidor. Proyectos y aplicaciones Python entiende de proyecos y aplicaciones. Lo habitual es crear un proyecto y dentro del mismo varias aplicaciones. Por ejemplo un proyecto e-commerce podria tener una aplicación para la autenticaci

pipenv

Imagen
Cuando trabajamos con Python siempre lo haremos con entornos virtuales, uno por proyecto. Antiguamente, se utilizaba "virtualenv" o "pyenv" para configurar estos entornos, pero en 2017 se creo "Pipenv" que es hoy en día el paquete recomendado por Python, aunque existen otras alternativas como "Poetry" o "Conda". Pipenv es un gestor de dependencias, al igual que lo es "npm" para Node o "composer" para PHP. Y para instalarlo podemos ejecutar: Cuando instalas Python en tu máquina, también estás instalando "pip" que es el gestor de paquetes de Python por defecto, pero entonces ¿Qué diferencia hay entre pip y pipenv? pipenv es una versión mejorada de pip. Podemos usar pip para instalar los paquetes que necesite nuestro proyecto, pip creará un fichero requirements.txt donde pondrá los paquetes instalados. Más adelante si queremos instalar el proyecto en otra máquina bastará con ejecutar $ pip install -r r

Python: OOP

Imagen
Post con pequeños fragmentos de código donde puedo visualizar de forma rápida como gestiona Python la programción orientada a objetos y todas sus características como la herencia, el polimorfismo o las interfaces. Atributos: Métodos: args y kwargs Son la mánera de pasar argumentos a un método sin definir ni sus nombres ni su cantidad. Se suele utilizar en el constructor de la clase. Herencia simple, sobrecarga y extensión En Python a diferencia de otros lenguajes como PHP o Java (aunque si lo hagan a través de interfaces), se permite la herencia múltiple . Conceptualmente es extraño e incluso surgen problemas como que las clases padre compartan mismos atributos o métodos, ya que sólo se puede heredad de una, y esto lo marcará el orden en el que hagamos la inicialización de los padres. Puedes usar el dunder __mro__ (Method Resolution Order) para averiguar el orden de herencia los padres. Ejm: print(mi_hijo.__mro__) Encapsulación (o como ocultar atributos y métod

Python: básicos

Imagen
Aprender un nuevo lenguaje de programcaión siempre implica recorrer los componentes básicos que todos los lenguaje comparten, y aprender los nuevos que este pueda incluir. Me he creado esta lista a modo de resumen para poder hacer consultas rápidas si lo veo necesario. Si a alguien le resulta interesante que sea bienvenido. Los básicos En Python los métodos del estilo __method_name__ se llaman " dunder " (double-under) Hay muchos dependiendo de la clase, pero __main__ es uno de los mäs importantes. Cuando importamos un fichero en nuestro código, el código fuera de las funciones será ejecutado tambíen. Y es por eso que es una buena practica incluir ese código dentro de este dunder. Ejemplo: Python usa PEP 8 (Python Enhancement Proposal) , una guia de estilo de Python. PyCharm la incluye por defecto. Entre las muchas sugerencias que nos hace, una es la recomendación de utilizar snake-case para nuestras variables y métodos. flake8 es un software que nos permite encon