Saltar a contenido

Octava App [Registration] Iniciando la sesión

Hasta ahora para iniciar y cerrar la sesión lo hemos hecho siempre a través del panel de administrador, pero esto sólo nos vale para webs sencillas. Si queremos crear algo más elaborado nos veremos obligados a integrar este proceso dentro del diseño de la página.

Por suerte gracias a las CBV no tenemos que desarrollar el sistema desde cero.

Para reutilizar parte del sistema de autenticación de Django, empezaremos creando nueva app llamada registration (se le suele dar este nombre). Esta app manejará tanto la autenticación como el registro y vamos a estar bastantes lecciones con ella.

Así que como siempre, vamos a empezar creando esta nueva app:

En esta app no vamos a programar casi nada, sólo se va a encargar de almacenar algunos templates.

A continuación vamos a dirigirnos al fichero urls.py del proyecto base y vamos a configurar un nuevo apartado /accounts/, debe ser ese nombre pues es el que las CBV de Django implementan por defecto:

Sólo con esto se nos han dado de alta varias URLS para manejar la autenticación. Podemos ver exactamente cuales accediendo al servidor /accounts/:\

Básicamente tenemos el login, el logout y varias vistas para manejar la gestión de contraseñas. Por ahora centrémonos en las dos primeras. Son todas las AUTH VIEWS que podemos ver en nuestra web favorita:

https://ccbv.co.uk/\  

Podríamos haber creado todas una a una manualmente, pero al haber hecho el include directo nos lo hemos ahorrado.

Sea como sea si intentamos acceder a /accounts/login/ cargaremos una LoginView genérica:

Y obviamente nos dará error de template:

Tenemos que crear el template login.html en el directorio templates/registration de la app que hemos creado antes:

Dentro sólo debemos preparar y mostrar un formulario de la forma clásica, pero como quiero ahorraros trabajo he preparado un diseño de antemano. Simplemente he copiado el código HTML generado por defecto, he comprobado errores globales en la lista form.non_field_errors y he añadido los atributos class y placeholder a los inputs.

https://gist.github.com/hcosta/7c3a46d5e5d061d936031ad5a6654acd 

Una vez creado el template tenemos que activar la app registration para que se cargue y reiniciar el servidor:

Y si actualizamos la página deberías ser capaces de verla correctamente:

Si intentamos acceder, veréis que nos da un fallo:

Esto ocurre porque Django está redireccionandonos automáticamente a una supuesta página de perfil en /accounts/profile. Más adelante crearemos un perfil de usuario, así que por ahora nos interesa cambiar de alguna forma esta redirección. ¿Cómo lo hacemos? Pues yendo a settings.py y añadiendo:

Ahora si nos identificamos correctamente podréis notar como nos redirecciona a la vista portada que tiene ese nombre:

Si en lugar de home quisiéramos redirigir al usuario a la lista de páginas podríamos hacer con:

Ya que esta opción actúa como la función reverse.

Vamos a tomarnos una pausa y luego hacemos el logout en la próxima lección.


Última edición: 25 de Marzo de 2021