https://github.com/subarudev0/estudiodjango4
basado en libro Django 4 By Example: Build Powerful and Reliable Python Web Applications from Scratch
https://github.com/subarudev0/estudiodjango4
Last synced: 10 months ago
JSON representation
basado en libro Django 4 By Example: Build Powerful and Reliable Python Web Applications from Scratch
- Host: GitHub
- URL: https://github.com/subarudev0/estudiodjango4
- Owner: SubaruDev0
- Created: 2025-09-12T00:21:19.000Z (10 months ago)
- Default Branch: main
- Last Pushed: 2025-09-12T02:11:36.000Z (10 months ago)
- Last Synced: 2025-09-12T02:58:05.637Z (10 months ago)
- Language: Python
- Size: 15.6 KB
- Stars: 1
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
---
# Proyecto Blog - Django 4 (Capítulo 1)
## Resumen del proyecto y entorno
* Este proyecto utiliza **Django 4.x**, framework web que sigue el patrón **MTV (Model-Template-View)**.
* Django separa responsabilidades:
* **Model:** maneja la base de datos.
* **Template:** define la presentación de los datos.
* **View:** controla la lógica y la interacción del usuario.
* Filosofía: **DRY (Don't Repeat Yourself)** → máxima reutilización de código y desarrollo rápido con Python.
* Características de Django 4:
* **Caching con Redis:** rendimiento mejorado mediante almacenamiento temporal.
* **Scrypt password hasher:** contraseñas más seguras.
* **Renderizado de formularios con templates:** permite personalización visual.
* **Soporte ASGI y ORM asíncrono:** consultas y vistas asíncronas para alta concurrencia.
---
## Setup rápido
```bash
# Crear entorno virtual
python3 -m venv venv
# Activar entorno (Linux/Mac)
source venv/bin/activate
# Activar entorno (Windows)
venv\Scripts\activate
# Instalar Django
pip install django==4.1.0
# Verificar versión
python3 -m django --version
# Instalar dependencias
pip install -r requirements.txt
```
---
## Estructura del proyecto
* `mysite/` → contenedor principal:
* `manage.py` → línea de comandos de Django.
* `mysite/` → paquete del proyecto:
* `settings.py` → configuración general (apps, middleware, DB, templates, estáticos).
* `urls.py` → rutas principales del proyecto.
* `asgi.py` / `wsgi.py` → configuración para servidores asíncronos y de producción.
* `blog/` → aplicación de blog:
* `models.py` → definición del modelo `Post` y manager `published`.
* `views.py` → vistas `post_list` y `post_detail`.
* `admin.py` → registro y configuración del modelo en el admin.
* `urls.py` → rutas específicas de la app.
* `templates/` → plantillas HTML (`base.html`, `list.html`, `detail.html`).
* `migrations/` → migraciones de base de datos.
* `tests.py` → pruebas unitarias.
* `apps.py` → configuración de la app.
> 🔗 Para más detalle línea por línea, ver comentarios en los archivos `.py` del repo.
---
## Settings principales (`settings.py`)
* **DEBUG** → `True` en desarrollo.
* **ALLOWED\_HOSTS** → dominios permitidos en producción.
* **INSTALLED\_APPS** → apps activas (admin, auth, sessions, messages, staticfiles, blog).
* **MIDDLEWARE** → middleware ejecutados por request/respuesta.
* **DATABASES** → configuración de SQLite por defecto.
* **LANGUAGE\_CODE / TIME\_ZONE / USE\_TZ** → internacionalización.
---
## Creación de la app `blog`
```bash
python manage.py startapp blog
```
* Archivos generados: `__init__.py`, `admin.py`, `apps.py`, `migrations/`, `models.py`, `views.py`, `tests.py`.
* Cada archivo cumple funciones específicas para la app y su interacción con Django.
---
## Modelo `Post` (blog)
* Representa publicaciones del blog.
* Campos principales:
* `title` → título del post.
* `slug` → URL amigable.
* `body` → contenido completo.
* `author`, `status`, `publish`, `created`, `updated`.
* Manager personalizado `published` → filtra automáticamente solo posts publicados.
* Meta → orden descendente por fecha, índice en `publish` para optimizar consultas.
**Fragmento de ejemplo:**
```python
# (Ver código completo en repo para comentarios línea por línea)
class Post(models.Model):
title = models.CharField(max_length=250)
slug = models.SlugField(max_length=250)
body = models.TextField()
```
* Django crea automáticamente `id` como PK autoincremental.
---
## Migraciones y DB
```bash
python manage.py makemigrations blog
python manage.py migrate
```
* Cada modelo = tabla; cada campo = columna.
* Tipos de campo Django → correspondencia SQL:
| Campo | Django | SQL |
| ----- | --------- | ------- |
| title | CharField | VARCHAR |
| slug | SlugField | VARCHAR |
| body | TextField | TEXT |
| id | AutoField | INT PK |
---
## Vistas (`views.py`) y URLs
* **post\_list:** lista posts publicados.
* **post\_detail:** detalle de post por ID (si está publicado).
* URLs de la app `blog/urls.py` → define rutas con namespace.
* `mysite/urls.py` → incluye rutas principales y conecta app `blog`.
> Ver código para ejemplos y comentarios de cada función.
---
## Admin de Django (`admin.py`)
* Configura filtros, búsqueda, prepopulated fields, orden y jerarquía por fecha.
* Permite gestionar posts y usuarios desde interfaz web.
---
## Templates (resumen)
* `base.html` → plantilla base con bloques (`title`, `content`) y sidebar.
* `list.html` → lista de posts con título, fecha, autor y resumen.
* `detail.html` → detalle de post con contenido completo.
> Ver HTML para comentarios y estructura detallada.
---
## Conceptos clave
* **Manager personalizado:** `Post.published.all()`.
* **Meta:** orden descendente e índices para optimizar consultas.
* **Request/Response cycle:** navegador → Django → view → template → HTML.
* **Admin:** gestiona posts y usuarios.
---
## Archivos `.py` usados
* `mysite/settings.py` → configuración general del proyecto
* `mysite/urls.py` → rutas principales
* `blog/models.py` → modelo Post + manager `published`
* `blog/views.py` → vistas de la app
* `blog/admin.py` → admin
* `blog/urls.py` → rutas de la app
> El resto de archivos generados (`apps.py`, `tests.py`, `migrations/`) son soporte o para futuras pruebas/migraciones.
---
# Django 4 Project – Capítulo 2
## Resumen del proyecto y entorno