An open API service indexing awesome lists of open source software.

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

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