Fecha de entrega: 11 de Agosto de 2026
Ponderación: 15%
Objetivo: Implementar inicio de sesión con base de datos usando el código de la evaluación en clase.
Debes tomar el código desarrollado en la evaluación en clase (10%) y agregar las siguientes funcionalidades:
En playas/models.py agrega:
from django.db import models
from django.contrib.auth.models import User
class Playa(models.Model):
nombre = models.CharField(max_length=100)
descripcion = models.TextField()
ubicacion = models.CharField(max_length=200)
imagen = models.CharField(max_length=300, blank=True)
def __str__(self):
return self.nombre
class Resena(models.Model):
usuario = models.ForeignKey(User, on_delete=models.CASCADE)
playa = models.ForeignKey(Playa, on_delete=models.CASCADE)
comentario = models.TextField()
fecha = models.DateTimeField(auto_now_add=True)
def __str__(self):
return f"{self.usuario.username} - {self.playa.nombre}"
En la terminal ejecuta:
python manage.py makemigrations
python manage.py migrate
python manage.py createsuperuser
Ingresa:
Username: tu cédula (ej: 12345678)
Email: tu correo
Password: (contraseña segura)
En playas/admin.py agrega:
from django.contrib import admin
from .models import Playa, Resena
admin.site.register(Playa)
admin.site.register(Resena)
Crea playas/templates/registration/login.html:
<!DOCTYPE html>
<html>
<head>
<title>Login - Playas Margarita</title>
</head>
<body>
<h1>Iniciar Sesión</h1>
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Ingresar</button>
</form>
</body>
</html>
En playas_margarita_[apellido]/urls.py agrega:
from django.urls import path, include
from django.contrib import admin
from django.contrib.auth import views as auth_views
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('playas.urls')),
path('accounts/login/', auth_views.LoginView.as_view(), name='login'),
path('accounts/logout/', auth_views.LogoutView.as_view(), name='logout'),
]
En settings.py agrega al final:
LOGIN_REDIRECT_URL = '/'
LOGOUT_REDIRECT_URL = '/'
En playas/views.py modifica:
from django.shortcuts import render
from django.contrib.auth.decorators import login_required
from .models import Playa
@login_required
def inicio(request):
return render(request, 'inicio.html')
@login_required
def lista_playas(request):
playas = Playa.objects.all()
return render(request, 'lista_playas.html', {'playas': playas})
Crea la carpeta playas/templates/ y dentro:
inicio.html:
<!DOCTYPE html>
<html>
<head>
<title>Inicio - Playas Margarita</title>
</head>
<body>
<h1>Bienvenido {{ user.username }}</h1>
<p>Proyecto: Playas de Margarita</p>
<p>Cédula: [Tu Cédula]</p>
<a href="{% url 'lista_playas' %}">Ver Playas</a>
<a href="{% url 'logout' %}">Cerrar Sesión</a>
</body>
</html>
lista_playas.html:
<!DOCTYPE html>
<html>
<head>
<title>Playas - Margarita</title>
</head>
<body>
<h1>Playas Disponibles</h1>
<a href="{% url 'logout' %}">Cerrar Sesión</a>
<ul>
{% for playa in playas %}
<li>{{ playa.nombre }} - {{ playa.ubicacion }}</li>
{% empty %}
<li>No hay playas registradas</li>
{% endfor %}
</ul>
</body>
</html>
En settings.py verifica que TEMPLATES tenga DIRS configurado:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True, # ← Importante: debe estar en True
...
},
]
Ejecuta el servidor: python manage.py runserver
Ingresa a: http://127.0.0.1:8000/accounts/login/
Inicia sesión con el superusuario creado
Deberías ser redirigido al inicio
Navega a la lista de playas
ApellidoNombre_Django_Proyecto.zip
│
├── playas_margarita_[apellido]/
│ ├── manage.py
│ ├── playas_margarita_[apellido]/
│ │ ├── settings.py
│ │ ├── urls.py
│ │ └── wsgi.py
│ ├── playas/
│ │ ├── models.py
│ │ ├── views.py
│ │ ├── urls.py
│ │ ├── admin.py
│ │ └── templates/
│ │ ├── registration/
│ │ │ └── login.html
│ │ ├── inicio.html
│ │ └── lista_playas.html
│ └── db.sqlite3
│
├── capturas/
│ ├── login.png
│ ├── inicio_sesion.png
│ ├── lista_playas.png
│ └── admin_panel.png
│
└── README.txt (nombre, cédula, sección)
Criterio | Descripción | Puntos
-----------------------|----------------------------------------------------|--------
Modelos creados | Playa y Resena en models.py | 3 pts
Migraciones ejecutadas | Base de datos creada correctamente | 2 pts
Superusuario | Usuario admin creado y funcional | 2 pts
Login funcional | Autenticación trabaja correctamente | 3 pts
Plantillas HTML | login.html, inicio.html, lista_playas.html | 3 pts
Vistas protegidas | @login_required en vistas | 2 pts
**TOTAL** | | **15 pts**
Puntos Obtenidos | Calificación (1-20) | Estado
--------------------------|--------------------------|-------------
13 - 15 pts | 18 - 20 | Excelente
10 - 12 pts | 14 - 17 | Bien
7 - 9 pts | 10 - 13 | Regular
0 - 6 pts | 01 - 09 | Reprobado
Problema | Causa Probable | Solución
------------------------------|-------------------------------------|----------------------------------------
ModuleNotFoundError: django | Django no instalado | pip install django
Port 8000 already in use | Otro proceso usa el puerto | python manage.py runserver 8001
TemplateDoesNotExist | APP_DIRS en False | Cambiar a True en settings.py
CSRF token missing | Falta {% csrf_token %} | Agregar en el formulario
Invalid password | Contraseña débil | Usar mayúsculas, números, símbolos
[ ] Django instalado correctamente
[ ] Proyecto creado con mi apellido
[ ] Aplicación 'playas' registrada en settings.py
[ ] 3 vistas creadas en views.py
[ ] Rutas configuradas en urls.py (app y proyecto)
[ ] Servidor ejecuta en puerto 8000
[ ] 4 capturas de pantalla tomadas
[ ] Modelos Playa y Resena creados
[ ] Migraciones ejecutadas sin errores
[ ] Superusuario creado
[ ] Login funcional con autenticación
[ ] 3 plantillas HTML creadas
[ ] Vistas protegidas con @login_required
[ ] Capturas de todas las funcionalidades
[ ] Código con mi nombre y cédula en comentarios
# Instalación
pip install django
# Crear proyecto
django-admin startproject nombre_proyecto
# Crear aplicación
python manage.py startapp nombre_app
# Ejecutar migraciones
python manage.py makemigrations
python manage.py migrate
# Crear superusuario
python manage.py createsuperuser
# Ejecutar servidor
python manage.py runserver
Agregar un formulario para que usuarios registrados puedan agregar reseñas a las playas
Mostrar el número total de playas en la página de inicio
Agregar un campo de imagen URL a las playas y mostrarla en el template
Entregar junto con el proyecto del 15%
Recurso | Enlace
--------------------------|--------------------------------------------------------
Documentación Django | https://docs.djangoproject.com/
Tutorial Oficial Django | https://docs.djangoproject.com/es/4.2/intro/
Django Models | https://docs.djangoproject.com/es/4.2/topics/db/models/
Django Authentication | https://docs.djangoproject.com/es/4.2/topics/auth/
Grupo de Clase | WhatsApp/Telegram sección 4DA