Files
proyecto-final/docs/views/login.md
T

51 lines
1.8 KiB
Markdown

# `login`
**Archivo:** `tienda/views.py`
**URL:** `/tienda/login/`
**Tipo:** Vista pública
## Descripción
Gestiona el inicio de sesión de un usuario.
- **GET** → Renderiza el formulario de login.
- **POST** → Autentica al usuario con email y contraseña.
- Si el correo no existe: muestra error y registra el intento fallido.
- Si la cuenta no está verificada (`registration_status == "CR"`): muestra error sin autenticar.
- Si las credenciales son correctas: inicia la sesión, configura su duración, envía un correo de bienvenida asíncrono (tarea Celery) y redirige al catálogo.
- Si la contraseña es incorrecta: muestra error y registra el intento fallido.
## Firma
```python
def login(request: HttpRequest):
```
## Parámetros
| Nombre | Tipo | Descripción |
|-----------|---------------|-----------------------|
| `request` | `HttpRequest` | Petición HTTP de Django. |
## Campos del formulario POST
| Campo | Descripción |
|-------------|-----------------------------------------------------------------------|
| `email` | Correo electrónico del usuario. |
| `password` | Contraseña del usuario. |
| `remember` | Si está presente, la sesión dura 14 días; de lo contrario, expira al cerrar el navegador. |
## Redirecciones
| Caso | Destino |
|-----------------------------|-----------------|
| Login correcto | `index` |
| Login fallido / cuenta no verificada | Mismo template `tienda/login.html` |
## Template
`tienda/login.html`
> [!NOTE]
> Los intentos de inicio de sesión (correctos y fallidos) se registran en el logger de auditoría `tienda.audit` con la IP del cliente.