Los modelos en Django se utilizan para guardar datos. Crearemos una clase llamada Carro, que hereda de models.Model. Esta clase tendrá un campo title de tipo models.TextField, con un max_length definido para limitar la cantidad de texto que puede aceptar.
from django.db import models
classCarro(models.Model): title = models.TextField(max_length=255)
¿Cómo se definen las vistas en Django?
Las vistas en Django se encargan de buscar datos y devolverlos al template. Una vista se define como un método que recibe un request y retorna una response. Usaremos render para pasar el request y el template a la vista.
¿Cómo se crean y utilizan los templates en Django?
Los templates son archivos HTML que reciben datos de las vistas. Para que Django los reconozca, creamos una carpeta llamada templates dentro de nuestra aplicación y luego otra con el nombre de la aplicación. Dentro, creamos el archivo carlist.html.
<!DOCTYPEhtml><html><head><title>Car List</title></head><body><h1>Lista de Carros</h1><ul> {% for car in car_list %}
<li>{{ car.title }}</li> {% endfor %}
</ul></body></html>
¿Cómo se registran las aplicaciones en Django?
Para que Django reconozca nuestra nueva aplicación, debemos agregarla a la lista INSTALLED_APPS en el archivo settings.py.
INSTALLED_APPS =[...'myFirstApp',]
¿Cómo se configuran las URLs en Django?
Creamos un archivo urls.py en nuestra aplicación y definimos la ruta para nuestra vista. Luego, incluimos esta configuración en el archivo urls.py principal del proyecto.
from django.contrib import admin
from django.urls import path, include
urlpatterns =[ path('admin/', admin.site.urls), path('myFirstApp/', include('myFirstApp.urls')),]
¿Cómo se conectan las vistas y templates en Django?
Pasamos los datos desde la vista al template usando un contexto. En el template, usamos etiquetas Django para iterar sobre los datos y mostrarlos.
<ul>{%for car in car_list %}<li>{{ car.title }}</li>{% endfor %}</ul>
Cómo critica constructiva, no me gusta que enseñan algo sin tener en cuenta las buenas prácticas, esto pasa en varios cursos, y eso es un doliente para aquellas personas que están aprendiendo desde 0 (y para las personas que tenemos experiencia y queremos aprender algo nuevo también). Cosas como por ejemplo encapsular los modelos en una carpeta y crear un archivo para cada uno, son cosas que deberían tocar en esta clase. Y no dejarlo pasar para más adelante (si es que lo menciona). O como manejar los rutas independientemente por cada app para luego llamarlas en las rutas del proyecto 🫤
Hola Carlos!
Gracias por tu comentario, el feedback es muy útil, vamos a tener una clase en el proyecto de curso donde vamos a configurar las urls basadas en dominios del proyecto donde vamos a recomendar mejores prácticas!
Concuerdo contigo. Muchos cursos de Platzi por lo que he notado no "profundizan" en muchos temas, sino que directamente saltan a un ejemplo sin explicar previamente para que funcionan ciertas cosas, o si se hace la explicación es muy por encima.
Mi aporte. se que se estan preguntando por que el profesor creo una carpeta template y dentro creo otra con el mismo nombre de la app my_first_project para guardar los archivos html o plantillas.
En Django, la estructura del proyecto y la ubicación de los archivos de plantilla (templates) siguen ciertas convenciones para asegurar que el framework pueda encontrar y renderizar correctamente los archivos HTML
Cada aplicación en Django puede tener sus propias plantillas y, para mantener el código organizado y evitar conflictos de nombres, se recomienda seguir esta estructura:
buenas, tengo una sugerencia sobre esta parte, podrian profundizar un poco mas en algunos conceptos claves que es necesario conocer, como por ejemplo, que la acción de poder tener condicionales y bucles dentro de nuestro html es proporcionado por el motor de plantillas Jinja.
Varios cursos de Django y siempre van a lo mismo, por favor traten de profundizar más.
Dejo una lista JSON para que la usen como lista de autos:
Para desarrolladores que vienen de JavaScript/React como yo :)
¡Hola! Si estás confundido con la estructura de carpetas como me pasó a mí, tranquilo, es normal, yo vengo de JS, TS, React, Next, etc y al ver my_first_project dentro de otra my_first_project me volví loco pensando que una era el servidor y otra el frontend.
Django NO funciona como React. Django es un framework FULL-STACK (como Next.js o Ruby on Rails), no hay separación entre frontend y backend. Todo está en el mismo lugar.
La estructura funciona más o menos así:
/my_first_project/ ← Carpeta raíz del proyecto
├── my_first_project/ ← ⚙️ CONFIGURACIÓNGLOBAL│ ├── settings.py ← Base de datos, zona horaria, apps instaladas
│ ├── urls.py ← Rutasprincipales(como ReactRouter)│ └── ...└── my_first_app/ ← 📦 APP/MÓDULOespecífico(maneja "carros") ├── models.py ← Define qué datos guardas(como esquemas de DB) ├── views.py ← Lógica de negocio(como componentes React) ├── templates/ ← HTML con superpoderes(como JSX pero más simple) └── ...
Cada "app" es como un LEGO reutilizable:
Puedes tener cars/, users/, cart/, products/, en este caso tenemos /my_first_app
Cada app maneja una funcionalidad específica
Se pueden mover entre proyectos
Flujo de Django:
Usuario visita URL → Django busca en urls.py
Encuentra la ruta → ejecuta función en views.py
View obtiene datos → renderiza template HTML
Usuario ve página completa
Si vienes de React: views.py = componentes, templates/ = JSX, models.py = manejo de datos.
¡Espero que esto te ayude a entenderlo un poco mejor! yo no sabía nada de Django
Ejecutar comando
pyton manage.py startapp my_first_app
en el archivo models.py
```js
class Carro(models.Model):
title = models.TextField(max_length=255)
Si es solo API REST, el Template deja de existir en la práctica (se reemplaza por serializers → JSON).
Si Django también maneja algunas vistas, el Template puede convivir (ej. panel de administración, emails renderizados, páginas públicas).
En Django REST Framework:
Lo que antes era Template ahora es el JSON Renderer.
El "template" no genera HTML sino que serializa datos (Serializer) para que el frontend (React) construya la interfaz.
🔹 Flujo ejemplo: GET /usuarios/
React(axios GET) ↓
DjangoURLDispatcher(/api/usuarios/) ↓
ViewSet(UserViewSet) ↓
Serializer(convierte modelo User → JSON) ↓
Response(JSON) ↓
React recibe JSON y lo pinta en su UI
✅ En conclusión:
En MVT clásico → Template = capa de presentación HTML.
En API REST + React → el Template ya no pinta nada: su rol lo asume React, y en Django se cambia por serializers/renderers que devuelven JSON.
Fuente: ChatGPT.
Correcto, también tenemos un curso de Django Rest Framework donde aprendemos a crear una API desde cero.
Tengo una pregunta, ¿cuales son los casos de uso donde brilla Django respecto a otros frameworks?. Por ejemplo todo el tema del templating es muy fácil de hacer también con fastAPI y no tiene esta curva de aprendizaje un poco compleja respecto a la estructura de archivos y carpetas, tu vas armando tu propia estructura con las necesidades que tu proyecto vaya teniendo.
Django destaca por su conjunto de herramientas integradas, permitiéndote aprender una sola vez y comenzar a crear aplicaciones de inmediato. Por ejemplo, Django ofrece:
Interfaz Administrativa: Django incluye una interfaz administrativa preconstruida que facilita la gestión de datos, algo que FastAPI no ofrece.
Baterías Incluidas: Django viene con autenticación, localización y ajustes de seguridad web integrados, listos para usar.
**Escalabilidad Estructurada: **Aunque la curva de aprendizaje puede ser más alta debido a la organización de carpetas, esta estructura facilita el desarrollo rápido y escalable. La separación de dominios permite evolucionar hacia microservicios en el futuro, ideal para startups en crecimiento. (También podrias usarlo con menos estructura para un proyecto pequeño)
creo que Django es un framework muy completo encuanto a conexion con bases de datos, manejo - autentificacion de usuarios y muchos otros modulos que en otros frameworks se debe instalar de uno por uno, la ventaja de fastAPI sobre django es que necesita menos boilerplate y es mas ligero (Por que le faltan esos modulo)
Los modelos son una abstracción de lo que será la tabla en una base de datos.
No es necesario saber bases de datos, pero es un "nice to have"
el modelo recibiría las peticiones y las entrega al template.
Entre los "campos" del modelo hay características propias de las bases de datos. (el tamaño del contenido, el tipo, etc)
Por otro lado a "my_first_app" usualmente le pongo de nombre "core" pues es el eje de lo que hago y a esa misma "altura" de carpetas creo una capeta de tempaltes y ahí dentro van ordenados los templates.
En el settings.py agrego:
Es necesario importar os antes de agregar esta línea
BRo gracias
¿Cómo generaste el for de manera automática dentro del HTML?
Y a lo intente y no me sale, quisiera saber si es una extensión o algo estoy haciendo mal :(.
Gran aporte!!! estuviste muy atento y fue de gran ayuda
Es una extensión. En la pantalla del profe, esquina dereche inferior, se ve que usa una extensión de Django. Yo uso Better Jinja . Tienes que instalarla y configurarla para que te autocomplete al escribir for... Te dejo un foro que me sirvió.
python - Visual Studio Code y plantillas Jinja - Stack Overflow
También estan snippets jinja y Jinja2 Snippet Kit , pero esas se autocompletan al usar j.for o jfor
Interesante, por fin entendí la parte del contexto que se envía y como se le envia informacin a los teplates y también la importancia de tener el return en la vista. También me gustó como explicó modelo->vista->url->template
Muchas gracias. Sé que lei en comentarios que faltaron otras cosas, pero ey... si estoy aprendiendo quiero entender los conceptos básicos, no sobrecomplicar. Luego uno va mejorando en buenas prácticas
Gran comentario! muchas gracias por verlo así.
Avisame si tienes dudas extra!
Nunca había hecho un MVC tan rapido, por lo general en otros lenguajes de programación esto es un parto. Me encanta la simplicidad de Python.
Yo tuve que añadirle lo siguiente para que no mostrará el error de no encontrar una página principal, pero si te vas directo a la liga no te marca el error. Solo por si gustan añadirlo:
Hola alguno sabe cual es la extensión de for para que se auto complete? y quede así:
{% for in %} {& end %}
Django (Baptiste Darthenay) Hola..instala esta extencion en vs code para el autocompletado
Thanks.
Casi me saco un ojo revisando qué tenía mal escrito y no se pintaban los corchetes...
El patrón MVT (Model-View-Template) es un patrón de arquitectura utilizado en el desarrollo de aplicaciones web, particularmente en el marco de trabajo Django para Python. Es similar al patrón MVC (Model-View-Controller) pero tiene algunas diferencias clave. Aquí se describe cada componente:
1. **Model (Modelo):**
- Es la capa que maneja la lógica de negocio y la interacción con la base de datos. Define la estructura de los datos, los comportamientos y las relaciones entre los datos.
- En Django, los modelos se definen como clases de Python que heredan de django.db.models.Model. Cada clase representa una tabla en la base de datos, y los atributos de la clase representan las columnas de esa tabla.
2. **View (Vista):**
- En MVT, la vista es responsable de la lógica de la aplicación y de procesar las solicitudes del usuario. Interactúa con el modelo para obtener los datos necesarios y selecciona la plantilla adecuada para renderizar la respuesta.
- En Django, una vista se define como una función o clase que recibe una solicitud web y devuelve una respuesta web. Las vistas pueden manejar diferentes tipos de solicitudes (GET, POST, etc.) y realizar acciones como consultar la base de datos, procesar formularios, y mucho más.
3. **Template (Plantilla):**
- Las plantillas son la capa de presentación que se utiliza para renderizar la interfaz de usuario. Es donde se define la estructura HTML, junto con cualquier lógica de presentación, para mostrar los datos al usuario.
- En Django, las plantillas son archivos HTML que pueden contener un lenguaje de plantillas específico (Django Template Language) para insertar datos dinámicos, realizar iteraciones, y condicionales dentro del HTML.
### Diferencias con MVC:
- En MVC, el controlador es el que maneja la lógica de la aplicación, mientras que en MVT, esta responsabilidad recae sobre la vista.
- En MVC, la vista solo se encarga de la presentación, mientras que en MVT, la plantilla (Template) cumple este rol.
### Ejemplo de Flujo en Django:
1. **Solicitud**: El usuario hace una solicitud a la aplicación web.
2. **Vista**: La vista correspondiente maneja la solicitud, interactúa con el modelo para obtener los datos necesarios.
3. **Modelo**: Si es necesario, se consulta el modelo para obtener o modificar datos.
4. **Plantilla**: La vista selecciona una plantilla y pasa los datos obtenidos del modelo a la plantilla.
5. **Respuesta**: La plantilla genera la respuesta en HTML que se envía de vuelta al usuario.
Es fundamental explicar por qué existe una carpeta adicional dentro del proyecto con el mismo nombre. Aunque en un primer vistazo pueda parecer innecesaria, esta estructura ofrece grandes beneficios en proyectos grandes y facilita el trabajo en equipo, especialmente cuando varios desarrolladores están involucrados.
A medida que un proyecto crece, comenzamos a agregar archivos adicionales: documentación, manuales técnicos y de usuario, archivos de configuración, scripts y otros recursos. Tener una carpeta adicional que contiene únicamente el código fuente del proyecto ayuda a mantener una clara separación entre el código y estos archivos externos.
Para los principiantes, esta separación puede no parecer tan relevante. Sin embargo, cuando trabajas en proyectos de mayor envergadura, te das cuenta de la importancia de una estructura ordenada. Con el tiempo, agradecerás tener una organización que permita un acceso rápido al código sin interferencias, y a la vez, facilita que otros archivos del proyecto estén organizados y accesibles para todo el equip
Luis, de verdad está una elegancia el curso, con esos efectos en el backgraound, las dinámicas, y mostrarnos los posibles errores que pueden pasar durante el desarrollo y mostrarlos, y como se pueden solucionar.
Sería genial que sigan haciendo cursos de esta manera ya que muchas veces en otros cursos, el error le pasa es a uno solo y no al profesor jaja, y uno es buscando por todo lado como solucionar, y se pierde mucho tiempo cuando estás desde 0.
Muchas gracias por mostrar los errores y el como solucionarlos ayuda un montón. Saludos