Academia X - Django de Cero A Experto
Academia X - Django de Cero A Experto
Contenido
1 Introducción 5
1.1 Bienvenida . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.1.1 Libro vivo . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.1.2 Alcance . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.2 Prerequisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.3 ¿Cómo evitar bloqueos? . . . . . . . . . . . . . . . . . . . . . . . 8
2 Primeros pasos 8
2.1 ¿Qué es Django? . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.2 Instalación de Django . . . . . . . . . . . . . . . . . . . . . . . . 10
2.3 Creación de un proyecto Django . . . . . . . . . . . . . . . . . . . 12
2.4 Estructura de un proyecto Django . . . . . . . . . . . . . . . . . . 13
2.5 El servidor de desarrollo . . . . . . . . . . . . . . . . . . . . . . . 15
2.6 Creación de una aplicación Django . . . . . . . . . . . . . . . . . . 16
2.7 Estructura de una aplicación en Django . . . . . . . . . . . . . . . 18
3 Modelos en Django 20
3.1 El ORM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.2 SQLite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.3 Configuración de base de datos . . . . . . . . . . . . . . . . . . . 22
3.4 Creación de modelos . . . . . . . . . . . . . . . . . . . . . . . . 24
3.5 Campos de modelos . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.6 Migración . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.7 Relaciones entre modelos . . . . . . . . . . . . . . . . . . . . . . 29
4 Shell en Django 33
4.1 Guardar modelo en shell . . . . . . . . . . . . . . . . . . . . . . . 33
4.2 Leer modelo en shell . . . . . . . . . . . . . . . . . . . . . . . . . 35
4.3 Filtrar modelo en shell . . . . . . . . . . . . . . . . . . . . . . . . 37
2
Contenido
5 Admin de Django 40
5.1 Acceder al panel . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
5.2 Crear superusuario . . . . . . . . . . . . . . . . . . . . . . . . . 40
5.3 Registrar modelo . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
6 APIs en Django 43
6.1 Creación de APIs . . . . . . . . . . . . . . . . . . . . . . . . . . 43
6.2 Serialización de datos . . . . . . . . . . . . . . . . . . . . . . . . 45
6.3 Parametros en url (str, int, slug, uuid, path) . . . . . . . . . . . . . . 46
6.4 Parametros en url para consultar modelos . . . . . . . . . . . . . . 49
6.5 Parametros en peticiones . . . . . . . . . . . . . . . . . . . . . . 50
6.6 Funciones de atajo . . . . . . . . . . . . . . . . . . . . . . . . . . 51
6.6.1 redirect() . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
6.6.2 get_object_or_404() . . . . . . . . . . . . . . . . . . . . . 52
6.6.3 get_list_or_404() . . . . . . . . . . . . . . . . . . . . . . . 54
7 Vistas en Django 55
7.1 Creación de vistas . . . . . . . . . . . . . . . . . . . . . . . . . . 55
7.2 Renderizado de plantillas . . . . . . . . . . . . . . . . . . . . . . 57
7.3 Manejo de formularios . . . . . . . . . . . . . . . . . . . . . . . . 59
7.4 Redirecciones y URLs . . . . . . . . . . . . . . . . . . . . . . . . 62
7.5 Archivos estáticos . . . . . . . . . . . . . . . . . . . . . . . . . . 63
7.6 Manejo de errores . . . . . . . . . . . . . . . . . . . . . . . . . . 65
8 Templates en Django 67
8.1 Variables en plantillas . . . . . . . . . . . . . . . . . . . . . . . . 67
8.2 Filtros en plantillas . . . . . . . . . . . . . . . . . . . . . . . . . . 70
8.3 Tags de plantillas . . . . . . . . . . . . . . . . . . . . . . . . . . 72
8.4 Iteración en plantillas . . . . . . . . . . . . . . . . . . . . . . . . 74
8.5 Condicionales en plantillas . . . . . . . . . . . . . . . . . . . . . . 75
3
Contenido
9 Siguientes pasos 79
9.1 Herramientas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
9.2 Recursos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
9.3 ¿Que viene después? . . . . . . . . . . . . . . . . . . . . . . . . 81
9.4 Preguntas de entrevista . . . . . . . . . . . . . . . . . . . . . . . 82
4
1 INTRODUCCIÓN
1 Introducción
1.1 Bienvenida
• Primeros pasos
• Modelos en Django
• Shell en Django
• Admin de Django
• APIs en Django
• Vistas en Django
• Templates en Django
La motivación de este libro es darte todo el conocimiento técnico que necesitas para
elevar la calidad de tus proyectos y al mismo tiempo puedas perseguir metas más
grandes, ya sea utilizar esta tecnología para tus pasatiempos creativos, aumentar
tus oportunidades laborales, o si tienes el espíritu emprendedor, incluso crear tu
propio negocio en línea. Confío en que este libro te dará los recursos que necesitas
para que tengas éxito en este campo.
Empecemos!
5
1 INTRODUCCIÓN
Esta publicación fue planeada, editada, y revisada manualmente por Xavier Reyes
Ochoa. La fundación del contenido fue generada parcialmente por inteligencia ar-
tificial usando ChatGPT (May 12 Version) de OpenAI. Puedes ver más detalles en
https://openai.com/
Esto es a lo que llamo un trabajo VIVO, esto quiere decir que será actualizado en
el tiempo a medida que existan cambios en la tecnología. La versión actual es 1.0.0
editada el 26 de julio de 2023. Si tienes correcciones importantes, puedes escribir-
nos a nuestra sección de contacto en https://wwww.academia-x.com
1.1.2 Alcance
El objetivo de este libro es llenar el vacío que existe sobre esta tecnología en Español
siguiendo el siguiente enfoque:
1.2 Prerequisitos
6
1 INTRODUCCIÓN
Si ya tienes estos requisitos, estarás en una buena posición para comenzar a apren-
der Django y profundizar en sus características y aplicaciones.
Si todavía no tienes conocimiento sobre algunos de estos temas, te recomiendo
buscar tutoriales básicos en blogs a través de Google, ver videos en YouTube, o
7
2 PRIMEROS PASOS
1. No solo leas este libro. La práctica es esencial en este campo. Practica todos
los días y no pases de lección hasta que un concepto esté 100% claro.
2. No tienes que memorizarlo todo, solo tienes que saber donde están los temas
para buscarlos rápidamente cuando tengas dudas.
3. Cuando tengas preguntas usa Google, StackOverFlow, y ChatGPT
4. Acepta que en esta carrera, mucho de tu tiempo lo vas utilizar investigando e
innovando, no solo escribiendo código.
5. No tienes que aprender inglés ahora pero considera aprenderlo en un futuro
porque los recursos más actualizados están en inglés y también te dará mejo-
res oportunidades laborales.
6. Si pierdas la motivación, recuerda tus objetivos. Ninguna carrera es fácil pero
ya tienes los recursos para llegar muy lejos. Te deseo lo mejor en este campo!
2 Primeros pasos
8
2 PRIMEROS PASOS
como una caja de herramientas que contiene todo lo que necesitas para construir
una aplicación web, desde la estructura básica hasta las herramientas avanzadas.
Imagínate que estás construyendo una casa desde cero: necesitas planos, materia-
les, herramientas y mucho tiempo. Pero, ¿qué pasaría si pudieras comenzar con una
casa preconstruida? Sería más rápido y fácil agregar tus propias personalizaciones
y hacerlo tuyo. Así es como funciona Django: te brinda una estructura preconstruida
para comenzar, ahorrándote tiempo y esfuerzo.
Además, Django es altamente escalable y seguro. Puedes construir aplicaciones
desde simples blogs hasta complejas plataformas de comercio electrónico. Con ca-
racterísticas como la autenticación integrada, la gestión de la base de datos y la
capacidad de manejar grandes cantidades de tráfico, Django es una de las opcio-
nes más populares para construir aplicaciones web hoy en día.
¡Este es un ejemplo de Django que entenderás a detalle más adelante!
Como puedes ver, en solo unas pocas líneas, puedes crear una función que devuel-
ve una respuesta personalizada a tu usuario. Ahora eso es potente.
¿Estoy emocionado por enseñarte a construir tus propias aplicaciones web con Djan-
go? ¡Empecemos!
9
2 PRIMEROS PASOS
¿Estámos listos para aprender cómo instalar Django? ¡Genial! Porque hoy te voy a
enseñar paso a paso cómo hacerlo.
Puedes dirigirte a la página oficial de Django (https://www.djangoproject.com/) y
revisar las instrucciones de descarga de la última versión.
En esta publicación instalaremos la última versión oficial que es la 4.2.3 (LTS). Para
esto utilizaremos el gestor de paquetes de Python, pip3:
Cuando se utiliza pip3 para instalar un paquete, descarga los archivos de distribu-
ción del paquete y los instala en el entorno de Python asociado a pip3. Los archivos
suelen almacenarse en un directorio de site-packages a nivel del sistema o en el
directorio de site-packages de un entorno virtual. Esto permite que el paquete sea
accesible desde cualquier parte del sistema o dentro del entorno virtual, y no solo
en el directorio desde el que se ejecutó pip3.
Una vez que se instale correctamente, puedes verificar la versión de Django insta-
lada con cualquiera de estos comandos:
10
2 PRIMEROS PASOS
11
2 PRIMEROS PASOS
¡Y listo! Con tan solo una línea de código, habrás creado tu proyecto. Pero espera,
aún hay más que hacer. Si ingresas a la carpeta de tu nuevo proyecto, verás que
ya tienes algunas carpetas y archivos por defecto. En particular, hay una carpeta
llamada nombre_del_proyecto con el archivo settings.py donde se encuentran las
configuraciones de tu proyecto.
Es importante que dediques un tiempo a revisar y modificar estas configuraciones
para asegurarte de que tu proyecto esté optimizado para tus necesidades. Por ejem-
plo, puedes especificar la zona horaria de tu proyecto o configurar la conexión a una
base de datos.
Ahora bien, aquí va un pequeño reto: agrega una aplicación a tu proyecto Django.
¿Cómo? Muy fácil. Utiliza el siguiente comando en tu terminal:
12
2 PRIMEROS PASOS
¡Inténtalo y verás lo fácil que es! Ahora ya sabes que tu proyecto de Django puede
tener una o varias aplicaciones y esto lo vamos a ver en las siguientes lecciones.
Recuerda que siempre puedes buscar en la documentación oficial de Django si tie-
nes dudas o necesitas más información. ¡Mucho éxito!
Si has llegado hasta aquí, es porque quieres aprender sobre la estructura de un pro-
yecto Django. ¡Genial! Django es un framework web muy poderoso, fácil de aprender
y altamente eficiente.
Para empezar, un proyecto Django está compuesto por varios archivos y carpetas
organizadas de forma jerárquica. En la carpeta principal del proyecto, tendrás un
archivo llamado manage.py. Este archivo te permitirá ejecutar comandos desde la
terminal que son esenciales para iniciar y manejar tu proyecto.
Además, encontrarás una carpeta principal del proyecto, la cual suele tener el mismo
nombre que el proyecto en sí. Esta carpeta contiene otro archivo importante llamado
settings.py, el cual es la piedra angular del proyecto. Aquí se especifican diferentes
atributos que afectan el comportamiento de tu aplicación, como la configuración de
la base de datos o los archivos estáticos.
Como programador de Python ya debes saber que el archivo init.py es un archivo
especial en Python y no específico de Django que se utiliza para indicar que un
13
2 PRIMEROS PASOS
directorio debe tratarse como un paquete. Este archivo se coloca típicamente dentro
de un directorio que contiene los archivos relacionados con un paquete de Python.
Dentro de la carpeta del proyecto, también encontrarás un archivo llamado urls.py,
la cual es responsable de manejar la distribución de las URLs en tu aplicación. Aquí
mapearás el patrón de URL a una vista que maneja la petición.
Otro archivo importante dentro del proyecto es el wsgi.py, el cual te permite desple-
gar tu aplicación usando los servidores web:
14
2 PRIMEROS PASOS
Si estás aquí es porque deseas saber más acerca del servidor de desarrollo en
Django. Parece algo aburrido, ¿no crees? ¡Pero no lo es! ¡Es la herramienta que te
permitirá tener una experiencia de desarrollo alucinante!
El servidor de desarrollo es la forma más fácil de comenzar a desarrollar en Django.
Te permite probar la funcionalidad de tu aplicación sin tener que preocuparte por
realizar una configuración de servidor completa. Además, está diseñado para ser
fácil de usar, lo que significa que no es necesario conocer todos los detalles de la
configuración del servidor para comenzar a usarlo.
Pero, ¿cómo lo usamos? Es muy sencillo. Lo único que tienes que hacer es abrir
una terminal, navegar a la carpeta raíz de tu proyecto Django y escribir el siguiente
comando:
¡Y eso es todo! ¡Tu servidor de desarrollo está corriendo ahora mismo en tu compu-
tadora! Ahora podrás ver tu aplicación ejecutándose en tu navegador web favorito
ingresando la dirección http://127.0.0.1:8000/. Vas a ver algunas advertencias rela-
cionadas con migración de base de datos que solucionaremos después.
Como reto, te propongo que intentes cambiar el puerto en el que se ejecuta el servi-
dor. Para ello, puedes agregar un número diferente después del comando runserver.
Por ejemplo: python3 manage.py runserver 8080.
¡Manos a la obra! ¡Te deseo mucha diversión mientras desarrollas en Django!
15
2 PRIMEROS PASOS
Ahora, para crear una respuesta con el texto qHola Mundor, creamos nuestros
archivos de vistas views.py y urls.py para nuestra aplicación de holamundo de esta
manera:
16
2 PRIMEROS PASOS
¡Genial! Ya tenemos nuestra aplicación en Django. Ahora solo nos queda probarla
corriendo el servidor y navegando a la dirección http://127.0.0.1:8000/holamundo.
Puedes ver que nuestro servidor de Django crea un archivo de HTML y lo sirve en
esta dirección.
Y para el reto, te propongo modificar el texto por qHola universo!ren el archivo
holamundo/views.py y refrescar el navegador para ver que los cambios se aplican
sin reiniciar el programa. ¡Mucho éxito!
17
2 PRIMEROS PASOS
18
2 PRIMEROS PASOS
Estos son solo algunos de los archivos comunes que puedes encontrar en una apli-
cación de Django. Dependiendo de tus necesidades, también puedes crear las car-
petas static y templates manualmente para almacenar archivos estáticos y plantillas
HTML respectivamente, y crear el archivo middleware.py para definir middleware
personalizado, entre otros.
Con esta analogía, un proyecto de Django es como una pizzería con diferentes apli-
caciones, que serían como los diferentes tipos de pizza que vendes en tu pizzería.
¡Bien hecho! Ahora sabes cómo se estructura una aplicación en Django. ¡Hora de
pedir una pizza como recompensa por tus logros!
19
3 MODELOS EN DJANGO
3 Modelos en Django
3.1 El ORM
Ahora vamos a hablar sobre un tema muy importante en Django: ¡El ORM!
¿Qué es el ORM? Bueno, es como un políglota que hace traducciones entre nuestra
base de datos y Django. Siendo más técnicos, ORM significa Mapeador de Objeto-
Relacional (Object-Relational Mapping en inglés). Lo que esto significa es que se
encarga de hacer la conexión entre las tablas de nuestra base de datos (la parte
relacional) y los objetos en nuestro código (la parte de objetos).
¿Por qué es importante? Bueno, digamos que tienes una aplicación web que utiliza
una gran cantidad de datos de usuario. Sin ORM, tendrías que escribir SQL manual-
mente para traer la información de la base de datos y convertirla en objetos que tu
código pueda entender. Pero con el ORM, todo eso se hace por nosotros. Hace que
nuestra vida sea mucho más fácil y nos permite concentrarnos en lo que realmente
importa: construir una aplicación increíble.
Y como todo en Django, ¡El ORM es súper fácil de usar! Por ejemplo, para obtener
una lista de todos los usuarios en nuestra base de datos, simplemente escribimos:
¿Listo? ¡Así de fácil! Y lo mejor de todo es que esto es solo la punta del iceberg; el
ORM de Django ofrece muchas más funcionalidades que nos permiten hacer todo
20
3 MODELOS EN DJANGO
3.2 SQLite
Ahora quiero hablarte de SQLite, una base de datos súper versátil y fácil de usar.
SQLite es muy popular en el mundo de la programación gracias a que no requie-
re un servidor para funcionar, lo que lo hace ideal para aplicaciones pequeñas o
medianas.
Ahora bien, ¿puedes ver un nuevo archivo llamado db.sqlite3 en tu proyecto? Si
no lo conoces, déjame decirte que ese archivo es donde SQLite guarda toda la
información que se está manejando en la base de datos. Así que si estás trabajando
en un proyecto de Django y ves un archivo con ese nombre, ya sabes de qué se
trata.
Pero ¡eso no es todo! Si eres fan de Visual Studio Code (VSCode), te alegrará saber
que hay una extensión súper útil llamada SQLite que permite visualizar información
de tu base de datos de manera muy sencilla. ¿Qué tal si además de guardar infor-
mación en SQLite, también la mostramos en un formato visualmente atractivo? Esta
extensión te puede ayudar con eso.
Para instalar la extensión qSQLiteren Visual Studio Code, puedes seguir estos
pasos:
21
3 MODELOS EN DJANGO
22
3 MODELOS EN DJANGO
De esta forma, le decimos a Django que queremos usar el motor de base de datos
SQLite y que queremos que la base de datos se llame db.sqlite3 y que se encuentre
en la raíz del proyecto o BASE_DIR.
El siguiente paso es migrar las tablas que vienen por defecto con Django. Para
hacerlo, simplemente debemos correr las migraciones de Django en nuestra aplica-
ción:
Con eso, Django creará todas las tablas necesarias para nuestra aplicación. Puedes
ver el contenido de tu base de datos que en este momento debería tener nuevas ta-
blas. Si revisamos la tabla auth_user podemos ver que tiene varias columnas como
id de tipo integer, password de tipo varchar, y last_login de tipo datetime, entre otras.
Estas tablas no tienen datos por ahora pero crearemos modelos en las siguientes
23
3 MODELOS EN DJANGO
24
3 MODELOS EN DJANGO
Aquí estamos creando un modelo qPersonarque cuenta con nombre, edad y pro-
vincia. La provincia es un campo de caracteres que solo acepta dos caracteres y
que será validado si corresponde a una de las opciones incluidas en la tupla PRO-
VINCIAS.
Ahora bien, no todo es perfecto. En la vida (y en la programación) hay retos. Por
eso, aquí te propongo un reto simple: crea un modelo denominado qLibrorque
incluya las siguientes características: título (cadena de caracteres), autor (cadena
de caracteres) y precio (decimal). ¡Manos a la obra!
Ya vimos como crear modelos y los atributos que vimos se llaman campos.
Los campos más populares son:
• CharField: este campo es perfecto para almacenar texto corto como nombres
25
3 MODELOS EN DJANGO
o títulos de películas.
Reto:
Crea un modelo llamado qContactorcon los siguientes campos: nombre, correo
electrónico, mensaje y fecha de creación. Asegúrate de utilizar los campos más
adecuados para cada tipo de información.
26
3 MODELOS EN DJANGO
3.6 Migración
Ahora hablaremos sobre migraciones en Django, un tema muy importante para quie-
nes trabajamos en el desarrollo web.
Las migraciones son como una mudanza, pero para nuestras bases de datos. Es
decir, si hacemos cambios en nuestro modelo de datos, como añadir un campo o
eliminar una tabla, necesitamos migrar esos cambios en nuestra base de datos para
que todo siga funcionando correctamente.
Y no es algo que se deba tomar a la ligera, ya que una mala migración puede causar
muchos dolores de cabeza y errores difíciles de solucionar. Así que,qmejor prevenir
que lamentarr, y asegurarnos de hacer migraciones correctamente.
Para hacer una migración en Django, lo primero es crear un archivo de migración
con el comando makemigrations. Luego, debemos aplicar esa migración a nuestra
base de datos usando el comando migrate.
Pero ¿cómo saber si nuestras migraciones están bien hechas? Una forma es usar
el comando sqlmigrate para ver el SQL que se generará para aplicar la migración,
y comprobar si tiene sentido.
Y hablando de migraciones, ¿saben cuál es el animal que migra las distancias más
largas? ¡El gaviotín ártico que migra más de 80 000 km al año del ártico a la Antártida
y de vuelta! Pero por suerte, en Django no necesitamos emprender largos viajes para
migrar nuestras bases de datos, ¡lo podemos hacer desde la comodidad de nuestro
ordenador!
Ahora, ¡vamos a practicar con este código! Creamos un modelo de datos en el ar-
chivo models.py en nuestra aplicación. Añadimos nuestra aplicación a la lista de
INSTALLED_APPS en el archivo settings.py de nuestro proyecto para que los mo-
delos sean reconocidos.
27
3 MODELOS EN DJANGO
28
3 MODELOS EN DJANGO
Y ahora al revisar nuestra base de datos podemos ver una nueva tabla <nombre
de app>_persona con las propiedades que hemos creado. Aquí es importante notar
que la propiedad id se crea automáticamente para cualquier modelo.
Si deseas revisar el comando de SQL que se realiza detrás de escena con esta
migración puedes correr el siguiente comando:
Y por último, un reto simple: crea un modelo de datos que incluya un campo de
tipo booleano, haz la migración correspondiente y comprueba que todo funciona
correctamente. ¡Adelante!
29
3 MODELOS EN DJANGO
modelos. Imagina que estamos creando una aplicación de blog, y tenemos un mo-
delo para los blogs y otro para los autores. Queremos que cada blog tenga un autor
específico, y que cada autor pueda tener varios blogs.
Empezemos creando una aplicación para nuestro blog:
30
3 MODELOS EN DJANGO
31
3 MODELOS EN DJANGO
Y ahora al revisar nuestra base de datos podemos ver nuevas tablas para cada
aplicación. Nota que la relación ManyToManyField ha creado una tabla adicional
que se encarga de mapear los Blogs a las Etiquetas.
Ahora, ¿estámos listos para el reto? Para ir más allá, puedes crear tus propios mo-
delos y definir relaciones entre ellos. Por ejemplo, puedes crear un modelo de qpro-
ductory un modelo de qpedidory definir una relación ForeignKey entre ellos donde
un pedido puede tener varios productos, pero sólo un producto puede pertenecer a
un pedido.
¡Que te diviertas creando relaciones sanas y estables en Django!
32
4 SHELL EN DJANGO
4 Shell en Django
Ahora vamos a hablar sobre cómo guardar un modelo en Django desde la terminal
de tu ordenador.
Ahora sí, manos a la obra. Primero, asegúrate de haber creado tu modelo en Django.
Luego, abre la terminal de tu computadora y accede al directorio donde se encuentra
tu proyecto de Django.
Una vez ahí, escribe el siguiente comando para acceder al shell de Django:
Después, importa tu modelo. ¡Muy bien! Ahora ya puedes crear una instancia de tu
modelo y guardarla en la base de datos utilizando el siguiente código:
33
4 SHELL EN DJANGO
Ahora puedes revisar los valores en tu base de datos en la tabla blog_autor. Y listo,
¡ya has guardado tu modelo desde el shell de Django!
También puedes guardar registros relacionados:
¡Reto! Como reto, te animo a que crees un modelo sencillo con algunos atributos y
lo guardes desde la terminal de tu ordenador. ¡Atrévete a probar nuevas cosas!
34
4 SHELL EN DJANGO
Hoy te voy a enseñar sobre cómo leer un modelo en Django usando la shell.
Ahora sí, al grano. Vamos a la shell de Django. Una vez allí, podemos importar el
modelo que queremos. Una vez importado el modelo, podemos leer los objetos que
se encuentran en la base de datos usando:
Notarás que esto nos permite obtener una lista QuerySet con cada elemento en esta
tabla. Estos elementos no son fáciles de distinguir a simple vista pero podríamos
obtener el valor del atributo nombre del primer elemento de esta manera:
35
4 SHELL EN DJANGO
Esta función retorna un f-string con el id, nombre, y el email del modelo Autor pero
podríamos formatearlo a nuestra preferencia. Ahora intenta leer todos los datos en
la tabla Autor a través del shell para ver la diferencia.
Y listo, de esta forma podemos leer nuestro modelo usando la shell. Pero, como
reto, ¿puedes intentar agregar un filtro a la consulta MiModelo.objects.all() para que
solo devuelva los objetos cuyo campo nombre sea igual a qJuanr? ¡Éxitos progra-
mando!
36
4 SHELL EN DJANGO
¿Estamos listos para aprender a filtrar modelos en Django? ¡Genial! ¡No te preocu-
pes, aquí está Django al rescate!
Para filtrar modelos en Django, podemos usar el shell de Django. El shell de Django
es como una caja de herramientas con la que podemos interactuar directamente
con nuestra base de datos.
Una vez dentro del shell, podemos importar cualquier modelo del proyecto. Por ejem-
plo, si queremos filtrar el modelo Autor, podemos hacer lo siguiente:
¿Fácil, no?
El ORM de Django también nos permite usar el método filter con opciones más es-
pecíficas. Por ejemplo, para seleccionar solo aquellos autores que tengan un precio
mayor a 100 podemos usar este código:
37
4 SHELL EN DJANGO
Pero espera, ¿qué significa cantidad__gt=100? ¿Es eso un error de escritura? No,
no lo es. En Django, utilizamos doble guión bajo (__) para hacer referencia a las
cláusulas de filtrado, en este caso, gt (greater than) que significa qmayor query lt
(less than) significaqmenor quer. Así que lo que estamos diciendo es que queremos
todos los productos cuyo precio es mayor a 100.
¡Buen trabajo! Ahora tú también sabes filtrar modelos en Django. ¡Ve y hazlo! Pero
antes, te reto a que pruebes filtrar otro modelo de tu proyecto. ¿Qué tal si intentas
filtrar el modelo Blog y seleccionar solo aquellos blogs publicados en los últimos 7
días?
Borrar instancias de modelos es algo que todos hemos tenido que hacer alguna vez.
Así que, sin más preámbulos, te enseñaré cómo hacerlo. Primero, entra a la shell
de Django. Luego, deberás importar el modelo que quieres borrar. Si por ejemplo,
tienes un modelo llamado Blog, deberías importarlo.
¡Mantén la calma! Lo más difícil ya pasó. Ahora, sólo tienes que utilizar el método
delete() para borrar el modelo que importaste. Sí, es así de simple, sólo tienes que
llamar al método delete(). Así:
38
4 SHELL EN DJANGO
¡Listo! Ya habrás borrado tu modelo desde la shell. Nota que si tienes otros modelos
relacionados con la propiedad models.CASCADE, estas instancias también se van
a borrar. ¿Fácil verdad?
Este método borra todos los objetos relacionados con el modelo, así que ten cuida-
do. (No sea que borres a alguien importante y luego venga a acusarte)
Ahora, para el reto. Te animo a que pruebes estos comandos en la shell y borres
un modelo que no necesites. ¡Pero ojo! Antes de hacerlo asegúrate de que no
lo necesitas, no queremos un desastre en nuestras manos. ¡Que la fuerza te
acompañe!
39
5 ADMIN DE DJANGO
5 Admin de Django
40
5 ADMIN DE DJANGO
Este comando nos va a pedir un nombre, un email, y una contraseña. Puedes usar
admin, djangotutorial@ejemplo.com, y abcd1234! respectivamente para tu aprendi-
zaje pero en un proyecto profesional recuerda usar un nombre y una contraseña
únicos. Tampoco olvides guardar tus credenciales en un lugar muy seguro que no
sea en el repositorio de tu proyecto en donde puedan verse compormetidas.
¡Con esto has creado un superusuario en Django! Ahora, puedes ingresar tu nombre
de usuario y contraseña e ingresar al panel de administración.
Dentro del panel puedes ver usuarios y grupos. Dentro de usuarios puedes ver el
nuevo usuario que hemos creado. Pero todavía no podemos ver nuestro modelos,
esto es porque debemos registrarlos y lo veremos en la siguiente lección.
¡Y ahora, para el reto! Si eres digno del título de superhéroe, crea un nue-
vo superusuario con el nombre de usuario qFlashr, el correo electrónico
qflash@justiceleague.comry una contraseña segura de tu elección. ¡No lo dudes,
adelante y crea tu superusuario!
41
5 ADMIN DE DJANGO
¡Listo! Con solo tres líneas de código, hemos registrado nuestro modeloqAutorrcon
Admin de Django.
Podemos ver el nombre de nuestro registro de acuerdo a la función __st__ que
definimos en nuestro modelo.
Ahora podemos agregar, editar y eliminar registros de nuestra base de datos a través
de la página web administrativa. ¡Genial, ¿no?!
Para agreadar podemos dar un clic en el botón Add y llenar los datos del autor. Como
nombre podemos usar Marcos y como email podemos usar marcos@ejemplo.com.
Presionamos Save para guardar.
Para editar el registro puedes dar un clic en el mismo, modificarlo con el nombre de
Marcos II, y guardarlo.
Para eliminar el registro puedes dar un clic en el mismo presionar DELETE.
Para el reto, te desafío a que personalices la apariencia del Admin de Django con el
fin de mejorar la experiencia del usuario. ¡No te detengas aquí, sigue aprendiendo!
42
6 APIS EN DJANGO
6 APIs en Django
¿Sabías que crear APIs en Django es más fácil de lo que parece? ¡Sí, lo sé!
Django tiene una arquitectura diseñada para facilitar el proceso de creación de APIs,
desde la serialización hasta la autenticación y autorización de usuarios. Pero no
vamos a profundizar en eso hoy, ¡vamos directo a la acción!
Para empezar, es recomendable que tengas un proyecto de Django configurado y
corriendo en tu máquina. Aquí podemos continuar con nuestra app de blogs. ¿Ya
tienes todo eso? ¡Genial! Ahora, vamos a crear una API REST. Esta es similar a la
API que creamos en la lección de qHola Mundorpero en lugar de servir un archivo
de HTML vamos a servir un objeto JSON que puede ser consumido por cualquier
aplicación.
Este código define una vista mi_api que toma todos los objetos de Autor y los convier-
te en JSON. La etiqueta @csrf_exempt es necesaria si planeas permitir solicitudes
de métodos no seguros (como POST, PUT, DELETE, etc.) desde tu API. Esto solo lo
43
6 APIS EN DJANGO
habilitamos para evitar ver un error de CSRF si lo pruebas con métodos no seguros
para este ejemplo.
Ahora registramos la función en una URL en nuestro proyecto.
Ahora puedes correr el servidor de Django y visitar la URL /blog/api para ver que
recibes un objeto json con todos los datos de la tabla de Autores.
Eso es todo lo que necesitas para crear tu propia API de ejemplo, ¿qué más pue-
des pedir? Pero no te rindas todavía, ¡tenemos un reto! Intenta mejorar este código
agregando alguna funcionalidad adicional.
¡Recuerda, siempre puedes contar con Django para impulsar tus proyectos web!
44
6 APIS EN DJANGO
45
6 APIS EN DJANGO
¡Increíble! Ahora solo estamos serializando el nombre del autor y retornando tan
solo el campo email. Ahora puedes revisar la respuesta del servidor en el inspector
de tu navegador.
Para desafiar tus habilidades de serialización, aquí te dejo un reto: serializa una
instancia de tu modelo favorito utilizando el formato XML en lugar de JSON. ¡Sal de
tu zona de confort y hazlo! ¡Ánimo!
¿Te imaginas ser capaz de recibir diferentes tipos de valores en tus URLs sin tener
que hacer malabares para procesarlos después? ¡Pues no busques más! Django
nos ofrece una gran solución: ¡los parámetros en la URL!
Con Django podemos establecer diferentes tipos de parámetros en la URL, como
strings (str), enteros (int), slug, uuid y path. Así, podremos utilizar nuestros URLs pa-
46
6 APIS EN DJANGO
ra enviarle a nuestra app toda la información que necesitamos para construir nues-
tras páginas de una forma organizada y estructurada. Además, esto también nos
permite construir URLs efectivas y fácilmente reconocibles para los usuarios.
Ahora bien, ¡presta atención! Si estás acostumbrado a definir URLS como
www.ejemplo.com/usuario/01, ya no tendrás que romperte la cabeza para procesar
ese número 01 que se te presenta en tu URL. Simplemente tendrás que declarar el
tipo de parámetro en tu urls.py y Django se encarga del resto.
Por ejemplo, si queremos que uno de nuestros parámetros sea un número entero,
podemos utilizar int. Si queremos que contenga solamente caracteres alfanuméricos
y guiones, podemos utilizar slug. Si queremos asegurarnos de que sea un identifica-
dor único, podemos utilizar uuid. Y si queremos aceptar cualquier tipo de valor como
parámetro en nuestra URL, utilizamos path ¡todo depende de lo que necesitemos!
Ahora tenemos que crear las funciones para recibir estos parametros.
47
6 APIS EN DJANGO
Ahora ¡Fácil, no? Simplemente utilizando los parámetros en nuestra URL, podemos
hacer que nuestras vistas sean más eficientes, nuestros URLs más sencillos y nues-
tras aplicaciones más elegantes.
¡Reto! Agrega una nueva vista en tu app que reciba un parámetro slug en la URL y
muestra un mensaje de bienvenida personalizado para el usuario. ¡Ponte a prueba
y deja a tus usuarios impresionados con URLs distintivas y efectivas!
48
6 APIS EN DJANGO
Aprendamos sobre los parámetros en las URL. Con esta funcionalidad, podemos
crear páginas dinámicas y personalizadas según los datos enviados directamente
en la URL con una sintaxis sencilla y fácil de entender.
Por ejemplo, si queremos mostrar información de un modelo específico en Django,
podemos usar parámetros para hacer una consulta personalizada de la siguiente
manera:
En el ejemplo anterior, usamos <int:pk> en nuestra URL que permite recibir un nú-
mero entero y agregarlo como parámetro de nuestra vista detalle_producto(). Luego,
hacemos una consulta al modelo Producto usando el número entero recibido para
recuperar la información del producto deseado, imprimiento un atributo del produc-
to.
Ahora, ¡vamos al reto! En el código anterior, debes agregar una redirección perso-
nalizada a una página de error si un producto no se encuentra en tu base de datos.
¿Te atreves a intentarlo?
49
6 APIS EN DJANGO
¡Ánimo! No tengas miedo de intentar nuevas cosas en Django. Cada vez que lo
haces, ¡aprendes algo nuevo!
50
6 APIS EN DJANGO
Reto:
Crea una vista en Django que reciba dos parámetros por GET, qnombrery qedadr
, y devuelva un mensaje personalizado que incluya ambos parámetros. ¡Anímate,
puedes hacerlo!
6.6.1 redirect()
Las funciones de atajo son funciones comunes que se usan en el desarrollo de apps
en Django. La función render() es la más común pero la dejaremos prar su propia
lección más adelante. Po ahora veamos redirect().
Imagínate que eres una persona súper animada que va a una fiesta, pero al llegar te
das cuenta que te has equivocado de dirección. Tu instinto es ir rápidamente al lugar
correcto, ¿verdad? Bueno, pues redirect() es exactamente eso, te permite redirigir
a tus usuarios a la página correcta en tu sitio web.
¿Pero cómo funciona? ¡Es súper fácil! Solo necesitas indicar a qué dirección quieres
que vaya la persona, y redirect() lo hace por ti. Además, también puedes personali-
zar un mensaje de error en caso de que algo salga mal en el proceso.
51
6 APIS EN DJANGO
En una situación más práctica, si un usuario intenta acceder a una página que re-
quiere de autenticación y no ha iniciado sesión, entonces puedes usar este atajo
para redirigirlos al formulario de inicio de sesión.
¡Ahora es tu turno! ¿Te atreves a intentar este sencillo reto? Crea una función para
una URL que redirija al usuario a la página de inicio.
6.6.2 get_object_or_404()
Imagina que tienes una vista que busca un objeto en la base de datos y lo muestra
en pantalla. ¿Qué pasa si ese objeto no existe? Django te entregará un error 500 y
tu usuario no entenderá qué ha pasado. Ahí es donde entra get_object_or_404().
Con esta función podrás buscar el objeto solicitado, y si no lo encuentra, recibirás
un error 404. Así le das una experiencia más amigable a tu usuario y evitas que
quieran quemar tu sitio web.
Para utilizarla, simplemente importa la función de la librería:
52
6 APIS EN DJANGO
53
6 APIS EN DJANGO
6.6.3 get_list_or_404()
Hoy vamos a hablar sobre una función muy útil en Django, se trata de
get_list_or_404(). Esta función es como Batman, siempre aparece cuando
más lo necesitamos y nos salva de los errores.
¿Alguna vez te ha pasado que intentas acceder a un objeto en Django pero no existe
en la base de datos? Es muy probable que hayas encontrado el famoso error 404,
que significaqNo encontrador. Pero no te preocupes, aquí es donde entra en acción
get_list_or_404(). Esta función nos permite obtener una lista de objetos o devolver
un error 404 si no se encuentran.
¿Quieres saber cómo trabajar con ella? No te preocupes, es muy fácil. Lo primero
que tienes que hacer es importarla:
54
7 VISTAS EN DJANGO
¡Y eso es todo por hoy! Ahora ya sabes cómo utilizar get_list_or_404() para evitar
los errores 404 en Django. ¿Te atreves a utilizarlo en tu próximo proyecto?
Reto:
Crea una vista en Django que utilice get_list_or_404() para mostrar todos los usua-
rios registrados en tu aplicación. ¡Anímate a probarlo!
7 Vistas en Django
55
7 VISTAS EN DJANGO
views.py, puedes definir la función bienvenida que tome como argumento la solicitud
y devuelva una respuesta que diga q¡Hola, bienvenid@ a mi sitio web!r.
¡Y eso es todo! Ahora solo necesitas configurar tus URL para que apunten a esta
vista. En tu archivo urls.py, puedes importar la vista bienvenida que creaste en el
paso anterior y asignarle una URL.
Aquí hemos asignado la URL /bienvenida/ para que muestre la vista bienvenida. Ya
sabes que puedes elegir cualquier URL que desees y asignarla a la vista correspon-
diente.
¡Y eso es todo! Ahora, cuando un usuario acceda a la URL /bienvenida/ en tu sitio
web, verá la página de bienvenida que creaste.
56
7 VISTAS EN DJANGO
57
7 VISTAS EN DJANGO
58
7 VISTAS EN DJANGO
Ahora te reto a que intentes agregar más contenido a la plantilla index.html. Pue-
des agregar imágenes, enlaces o incluso darle tu propio estilo con CSS. ¡Diviértete
explorando y creando tu sitio web personalizado!
59
7 VISTAS EN DJANGO
Una vez que tengamos nuestro formulario, necesitamos crear una plantilla en la que
mostrarlo. Podemos hacer esto creando un archivo HTML y utilizando el formulario
en él. Por ejemplo, podríamos crear un archivo llamado nombre.html con el siguiente
contenido:
60
7 VISTAS EN DJANGO
61
7 VISTAS EN DJANGO
62
7 VISTAS EN DJANGO
En este ejemplo, creamos una nueva ruta llamada 'ruta_antigua/' que apunta a una
instancia de RedirectView. Pasamos la URL de destino que queremos que el usuario
sea redirigido como argumento en el parámetro url. En este caso, estamos redirigien-
do a los usuarios hacia la página principal de Django.
¡Genial! Ahora, cada vez que un usuario intente acceder a la ruta antigua, será
redirigido automáticamente a la nueva URL.
Y ahora, ¡aquí va un reto para ti!
Reto:
Implementa una redirección en Django que lleve a los usuarios a la página de docu-
mentación oficial de Python.
¡Buenas habilidades!
Los archivos estáticos son los archivos que no cambian, como imágenes, hojas de
estilo CSS o archivos JavaScript. En Django, los archivos estáticos se almacenan
63
7 VISTAS EN DJANGO
64
7 VISTAS EN DJANGO
65
7 VISTAS EN DJANGO
zar bloques try-except alrededor de cualquier sección de código que pueda generar
un error.
Aquí tienes un ejemplo de cómo manejar errores en Django:
66
8 TEMPLATES EN DJANGO
8 Templates en Django
Hoy vamos a hablar sobre las variables en las plantillas de Django. ¡Pero no te
preocupes, no es tan complicado como parece!
En Django, podemos pasar variables desde nuestras vistas a las plantillas para mos-
trar información dinámica en nuestro sitio web. Esto nos permite personalizar y mos-
trar datos relevantes para cada usuario.
Veamos un ejemplo que te ayudará a comprenderlo mejor:
67
8 TEMPLATES EN DJANGO
En este ejemplo, estamos configurando una URL para la vista que mostrará la infor-
mación de un usuario.
En la plantilla, utilizamos las llaves dobles {{ }} para indicar que queremos mostrar
una variable. En este caso, estamos accediendo a las propiedades de la variable
usuario, como el nombre, el apellido, el correo electrónico, la edad y la ciudad.
68
8 TEMPLATES EN DJANGO
69
8 TEMPLATES EN DJANGO
Los filtros son una forma sencilla y poderosa de realizar transformaciones en los
datos que se muestran en las plantillas. Son como pequeñas funciones que toman
un valor de entrada, lo procesan y devuelven un valor transformado.
Imagínate que tienes un texto en minúsculas y quieres mostrarlo todo en mayús-
culas en tu plantilla. Puedes crear un filtro personalizado utilizando el decorador
@register.filter y @stringfilter. Por ejemplo:
En este ejemplo, hemos creado un filtro llamado mayusculas que toma un valor y lo
convierte en mayúsculas utilizando el método upper() de Python.
Luego, en nuestra plantilla, podemos cargar el filtro utilizando el tag {% load %} y
utilizarlo en cualquier variable. Por ejemplo:
70
8 TEMPLATES EN DJANGO
Finalmente, necesitamos agregar una nueva URL en nuestro archivo urls.py que
mapee a esta vista. Por ejemplo:
71
8 TEMPLATES EN DJANGO
72
8 TEMPLATES EN DJANGO
Por ejemplo, si queremos mostrar una imagen en nuestra página, podemos utilizar
el tag {% static %} para indicar la URL de la imagen.
73
8 TEMPLATES EN DJANGO
Este código creará una lista desordenada en HTML, y dentro de ese bucle for, cada
lenguaje de tu lista será representado por un elemento <li>. Así de simple y poderoso
es utilizar la iteración en plantillas de Django.
Puedes asociar esta plantilla a una URL en tu archivo urls.py y utilizar la función
render() en tu archivo views.py para mostrar esta plantilla en una página web. ¿Ve
cómo todo encaja perfectamente?
74
8 TEMPLATES EN DJANGO
¿Quieres hacer un reto? ¡Perfecto! Aquí tienes un desafío simple para ti: Intenta
agregar un cuarto lenguaje a la lista, como por ejemplo qPythonr. Prueba tu có-
digo y observa cómo se actualiza automáticamente en tu página web. ¡Diviértete
experimentando!
Imagina que tenemos un sitio web donde los usuarios pueden iniciar sesión y tienen
diferentes roles, como administrador o superusuario. Queremos mostrar un mensaje
personalizado de bienvenida según el rol del usuario.
75
8 TEMPLATES EN DJANGO
En este ejemplo, tenemos una vista llamada get_usuario que simplemente devuelve
los datos de un usuario en forma de diccionario. Estos datos se pasan a la plantilla
76
8 TEMPLATES EN DJANGO
Imagina que estás construyendo un sitio web y tienes muchas páginas que compar-
ten elementos comunes, como la estructura básica, la barra de navegación o el pie
de página. Sería un gran dolor de cabeza tener que duplicar todo el código en cada
una de las páginas, ¿verdad?
Aquí es donde entra en juego la herencia de plantillas en Django. Puedes crear una
plantilla base con todos los elementos comunes y luego heredar esta plantilla en
cada una de las páginas que necesites.
Por ejemplo, imagina que tienes una plantilla base llamada base.html. En esta plan-
tilla, tienes el encabezado con el título de la página en un bloque llamado titulo y el
contenido principal en un bloque llamado contenido.
77
8 TEMPLATES EN DJANGO
Ahora, en tu página de inicio, puedes extender esta plantilla base usando la etiqueta
{% extends 'base.html' %}. Esto significa que toda la estructura y el contenido de la
plantilla base se heredarán en tu página de inicio.
Y eso es todo. ¡Ahora tienes una página de inicio con todos los elementos comunes
78
9 SIGUIENTES PASOS
de la plantilla base!
Recuerda que puedes heredar la plantilla base en todas las páginas que necesites
y sobrescribir los bloques según tus necesidades. Esto te permitirá mantener un
código limpio y organizado, ¡sin tener que duplicar todo el contenido una y otra vez!
¡Desafío para ti!
Ahora te desafío a que crees una nueva página en tu sitio web, heredando la plantilla
base y agregando tu propio contenido. Puedes personalizar el título, el contenido
o incluso agregar nuevos bloques si lo deseas. ¡Diviértete y experimenta con la
herencia de plantillas en Django!
9 Siguientes pasos
9.1 Herramientas
79
9 SIGUIENTES PASOS
oficial.
4. Django Crispy Forms - Es una biblioteca que te permite generar formularios
HTML con una apariencia elegante y personalizable. Proporciona una sintaxis sen-
cilla para definir los campos de tu formulario y también te permite personalizar su
apariencia. Puedes consultar más información en el sitio oficial.
5. Django Cors Headers - Esta herramienta es útil si necesitas habilitar solicitu-
des HTTP desde dominios diferentes al tuyo. Te permite añadir encabezados de
Autorización CORS a tus respuestas HTTP. Puedes obtener más información en su
repositorio oficial.
Estas son solo algunas de las muchas herramientas disponibles para Django. Espe-
ro que esta información te sea útil. ¡Buena suerte con tu aprendizaje de Django!
9.2 Recursos
Aquí tienes algunos de los recursos en línea más utilizados para aprender y trabajar
con Django:
80
9 SIGUIENTES PASOS
4. Django for Beginners - Este libro escrito por William S. Vincent es una exce-
lente guía para principiantes que desean aprender Django. Cubre los concep-
tos básicos, proporciona ejemplos prácticos y explica las mejores prácticas.
Enlace a Django for Beginners
5. Django Reddit - Esta comunidad en línea es un gran recurso para obtener
ayuda y discutir temas relacionados con Django. Los usuarios publican pre-
guntas y problemas, y otros miembros de la comunidad brindan soluciones y
consejos útiles. Enlace a Django Reddit
Estos son solo algunos de los recursos en línea más populares para Django. ¡Espero
que te sean útiles!
Después de aprender Django, hay varios pasos que puedes tomar para seguir tra-
bajando en tu desarrollo como desarrollador web. Algunas opciones incluyen:
81
9 SIGUIENTES PASOS
Aquí te presento una lista con preguntas comunes en una entrevista de Django,
junto con sus respuestas correspondientes:
82
9 SIGUIENTES PASOS
jar las solicitudes web en Django, mientras que una función basada en vistas
es un enfoque más simple y tradicional.
3. ¿Qué es una migración en Django? Una migración en Django es un archivo
que contiene instrucciones para modificar la estructura de la base de datos.
4. ¿Cuál es la principal ventaja de utilizar Django ORM? La principal ventaja de
utilizar Django ORM es que nos permite interactuar con la base de datos de
manera intuitiva y segura, sin tener que escribir consultas SQL directamente.
5. ¿Qué es una qquerysetren Django? Un queryset en Django es una repre-
sentación de una consulta a la base de datos, que permite recuperar, filtrar y
ordenar datos de manera eficiente.
6. ¿Cómo se crea un nuevo proyecto en Django? Para crear un nuevo proyecto
en Django, se utiliza el comando django-admin startproject nombre_proyecto.
7. ¿Cuál es la función de los archivos settings.py en Django? Los archivos
settings.py en Django contienen la configuración del proyecto, como la base
de datos, las claves secretas, las aplicaciones instaladas, entre otros.
8. ¿Qué es el archivo urls.py en Django? El archivo urls.py en Django contiene
las rutas URL del proyecto y las vistas asociadas a cada ruta.
9. ¿Cómo se crea una nueva aplicación en Django? Para crear una nueva
aplicación en Django, se utiliza el comando python manage.py startapp
nombre_app.
10. ¿Cuál es la diferencia entre HttpRequest y HttpResponse en Django?
HttpRequest es un objeto que representa una solicitud HTTP, mientras que
HttpResponse es un objeto que representa la respuesta HTTP enviada al
usuario.
Espero que esta lista te sea de ayuda para prepararte para tus entrevistas. ¡Buenas
habilidades!
83