Saltar a contenido

Autenticación y cierre de sesión en Django

En resumen

Django proporciona un sistema de autenticación integrado que permite gestionar el inicio y cierre de sesión de los usuarios mediante sus vistas, formularios y URLs.

Instrucciones: nuevo proyecto

A continuación, selecciona tu plataforma y sigue los pasos indicados para configurar un nuevo proyecto con Django.

Si ya tienes un proyecto

Las siguientes instrucciones están pensadas para configurar un proyecto Django desde cero. Si ya tienes un proyecto Django creado y configurado, no despliegues esta sección y continúa con el siguiente paso del post.

Ver Instrucciones

1. Abrir el símbolo de sistema

Presiona Win+R para abrir la ventana Ejecutar. Escribe cmd y presiona Enter para abrir el Símbolo del sistema (CMD).

Abrir CMD

Abrir el símbolo del sistema (CMD)

2. Ir a la ubicación deseada

Una vez que tengas el CMD abierto, usa el comando cd para navegar a la carpeta donde deseas crear tu proyecto. Por ejemplo, si deseas ir a la carpeta Documentos:

cd %UserProfile%\Documents #(1)!
  1. Ingresa a la carpeta Documentos del usuario actual.

3. Crear la carpeta del proyecto y acceder a ella

Ejecuta el siguiente comando reemplazando mi-proyecto por el nombre deseado:

mkdir //PROJECT// #(1)!
cd //PROJECT// #(2)!
  1. Crea la carpeta del proyecto
  2. Ingresa a la carpeta creada anteriormente

4. Crear el entorno virtual

Ejecuta el siguiente comando para crear un entorno virtual en la carpeta del proyecto:

python -m venv .venv #(1)!
  1. Crea un entorno virtual de Python llamado .venv.

5. Activar el entorno virtual

Ejecuta el siguiente comando para activar el entorno virtual:

.\.venv\Scripts\activate

Una vez activado, deberías ver (.venv) al comienzo de la línea de comandos.

(.venv) C:\Users\mcherrera\nuevo-proyecto

Ahora tenemos un entorno limpio y listo para trabajar.

6. Instalar Django en el entorno virtual

Una vez que el entorno virtual está activado, instala Django con el siguiente comando:

(.venv) pip install django

7. Generar un nuevo

Con la herramienta django-admin y el comando startproject se puede generar automáticamente la estructura inicial de un nuevo proyecto Django.

(.venv) django-admin startproject _site .

Utilizamos un punto . al final del comando para generar el proyecto en el directorio actual, evitando que Django cree una carpeta adicional con el nombre del proyecto.

8. Archivos del proyecto

Una vez generado, tendrás disponible el archivo manage.py en el proyecto:

Archivos del proyecto
 mi-proyecto
├──  _site
│   ├──  __init__.py #(1)!
│   ├──  asgi.py #(2)!
│   ├──  settings.py #(3)!
│   ├──  urls.py #(4)!
│   └──  wsgi.py #(5)!
├──  .venv #(6)!
└──  manage.py #(7)!
  1. Inicializa el paquete Python del proyecto Django.
  2. Configura el punto de entrada ASGI para servidores asíncronos.
  3. Contiene la configuración principal del proyecto Django.
  4. Define las rutas y URLs del proyecto.
  5. Configura el punto de entrada WSGI para servidores web tradicionales.
  6. Contiene el entorno virtual de Python del proyecto.
  7. Permite administrar el proyecto mediante comandos de Django.

El archivo manage.py permite administrar y ejecutar distintas tareas del proyecto Django, como iniciar el servidor de desarrollo, ejecutar migraciones y crear aplicaciones.

1. Abrir la terminal

Presiona las teclas Ctrl+Alt+T o busca Terminal en tu lanzador de aplicaciones para abrir una nueva Terminal.

Abrir Terminal

Abrir Terminal en Linux

2. Navegar a la ubicación deseada

Una vez que tengas la terminal abierta, usa el comando cd para navegar a la carpeta donde deseas crear el proyecto Django. Por ejemplo, ir a Documentos:

Terminal
cd ~/Documents

3. Crear la carpeta del proyecto y acceder a ella

Ejecuta el siguiente comando reemplazando mi-proyecto por el nombre que deseas:

Terminal
mkdir //PROJECT// #(1)!
cd //PROJECT// #(2)!
  1. Crea la carpeta del proyecto
  2. Ingresa a la carpeta creada anteriormente

4. Crear el entorno virtual

Terminal
python3 -m venv .venv

5. Activar el entorno virtual

Terminal
source .venv/bin/activate

Una vez activado, deberías ver (.venv) al comienzo de la terminal.

6. Instalar Django en el entorno virtual

Una vez que el entorno virtual está activado, instala Django con el siguiente comando:

Terminal
(.venv) pip install django

7. Generar un nuevo

Con la herramienta django-admin y el comando startproject se puede generar automáticamente la estructura inicial de un nuevo proyecto Django.

Terminal
(.venv) django-admin startproject _site .

Utilizamos un punto . al final del comando para generar el proyecto en el directorio actual, evitando que Django cree una carpeta adicional con el nombre del proyecto.

8. Archivos del proyecto

Una vez generado, tendrás disponible el archivo manage.py en el proyecto:

Archivos del proyecto
 mi-proyecto
├──  _site
│   ├──  __init__.py #(1)!
│   ├──  asgi.py #(2)!
│   ├──  settings.py #(3)!
│   ├──  urls.py #(4)!
│   └──  wsgi.py #(5)!
├──  .venv #(6)!
└──  manage.py #(7)!
  1. Inicializa el paquete Python del proyecto Django.
  2. Configura el punto de entrada ASGI para servidores asíncronos.
  3. Contiene la configuración principal del proyecto Django.
  4. Define las rutas y URLs del proyecto.
  5. Configura el punto de entrada WSGI para servidores web tradicionales.
  6. Contiene el entorno virtual de Python del proyecto.
  7. Permite administrar el proyecto mediante comandos de Django.

El archivo manage.py permite administrar y ejecutar distintas tareas del proyecto Django, como iniciar el servidor de desarrollo, ejecutar migraciones y crear aplicaciones.

1. Abrir la terminal de comandos

Presiona Cmd+Space para abrir Spotlight, luego escribe terminal y presiona Enter

Abrir Terminal en MacOS

Abrir Terminal en macOS

2. Navegar a la ubicación deseada

Una vez que tengas la terminal abierta, usa el comando cd para navegar a la carpeta donde deseas crear el proyecto Django. Por ejemplo, ir a Documentos:

Terminal
cd ~/Documents

3. Crear la carpeta del proyecto y acceder a ella

Ejecuta el siguiente comando reemplazando mi-proyecto por el nombre que deseas:

Terminal
mkdir //PROJECT// #(1)!
cd //PROJECT// #(2)!
  1. Crea la carpeta del proyecto
  2. Ingresa a la carpeta creada anteriormente

4. Crear el entorno virtual

Terminal
python3 -m venv .venv

5. Activar el entorno virtual

Terminal
source .venv/bin/activate

Una vez activado, deberías ver (.venv) al comienzo de la terminal.

6. Instalar Django en el entorno virtual

Una vez que el entorno virtual está activado, instala Django con el siguiente comando:

Terminal
(.venv) pip install django

7. Generar un nuevo

Con la herramienta django-admin y el comando startproject se puede generar automáticamente la estructura inicial de un nuevo proyecto Django.

Terminal
(.venv) django-admin startproject _site .

Utilizamos un punto . al final del comando para generar el proyecto en el directorio actual, evitando que Django cree una carpeta adicional con el nombre del proyecto.

8. Archivos del proyecto

Una vez generado, tendrás disponible el archivo manage.py en el proyecto:

Archivos del proyecto
 mi-proyecto
├──  _site
│   ├──  __init__.py #(1)!
│   ├──  asgi.py #(2)!
│   ├──  settings.py #(3)!
│   ├──  urls.py #(4)!
│   └──  wsgi.py #(5)!
├──  .venv #(6)!
└──  manage.py #(7)!
  1. Inicializa el paquete Python del proyecto Django.
  2. Configura el punto de entrada ASGI para servidores asíncronos.
  3. Contiene la configuración principal del proyecto Django.
  4. Define las rutas y URLs del proyecto.
  5. Configura el punto de entrada WSGI para servidores web tradicionales.
  6. Contiene el entorno virtual de Python del proyecto.
  7. Permite administrar el proyecto mediante comandos de Django.

El archivo manage.py permite administrar y ejecutar distintas tareas del proyecto Django, como iniciar el servidor de desarrollo, ejecutar migraciones y crear aplicaciones.

Habilitar la autenticación

Django proporciona vistas y funcionalidades listas para utilizar en las operaciones de autenticación, como iniciar y cerrar sesión. Estas forman parte de la aplicación django.contrib.auth, que viene incluida por defecto en un proyecto Django:

_site/settings.py
33
34
35
36
37
38
39
40
INSTALLED_APPS = [
    "django.contrib.admin",
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.messages",
    "django.contrib.staticfiles",
]

Migraciones

El sistema de autenticación utiliza modelos y tablas propias de Django. Por esta razón, debemos ejecutar las migraciones antes de utilizarlo:

Terminal
(.venv) python manage.py migrate

Configurar las URLs de autenticación

Podemos incluirlas directamente en las URLs del proyecto:

_site/urls.py
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
"""
URL configuration for _site project.

The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/6.1/topics/http/urls/
Examples:
Function views
    1. Add an import:  from my_app import views
    2. Add a URL to urlpatterns:  path('', views.home, name='home')
Class-based views
    1. Add an import:  from other_app.views import Home
    2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
Including another URLconf
    1. Import the include() function: from django.urls import include, path
    2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('accounts/', include('django.contrib.auth.urls'))
]

Con esto, Django habilita las URLs correspondientes a las operaciones de autenticación, incluyendo el inicio y cierre de sesión.

URL Vista
/accounts/login/ Inicio de sesión
/accounts/logout/ Cierre de sesión
/accounts/password_change/ Cambio de contraseña
/accounts/password_reset/ Restablecimiento de contraseña

Crear el formulario de inicio de sesión

Las vistas de autenticación de Django utilizan un formulario propio para solicitar las credenciales del usuario.

Debemos crear la siguiente estructura dentro de nuestra aplicación:

core/
└── templates/
    └── registration/
        └── login.html

Luego podemos crear el formulario de inicio de sesión:

core/templates/registration/login.html
<form method="post">
    {% csrf_token %}

    {{ form.as_p }}

    <button type="submit">
        Iniciar sesión
    </button>
</form>

El formulario proporcionado por Django contiene los campos necesarios para autenticar al usuario.

Configurar la página de inicio

Por defecto, después de iniciar sesión podemos definir la página a la que será dirigido el usuario mediante LOGIN_REDIRECT_URL:

_site/settings.py
LOGIN_REDIRECT_URL = '/'

De esta forma, cuando la autenticación sea exitosa, Django redirigirá al usuario hacia la página principal.

Mostrar el usuario autenticado

Una vez iniciada la sesión, podemos acceder al usuario autenticado mediante request.user.

En una plantilla también podemos utilizar directamente user:

{% if user.is_authenticated %}
    <p>Bienvenido, {{ user.username }}</p>
{% endif %}

La propiedad is_authenticated permite comprobar si existe un usuario autenticado en la sesión actual.

Habilitar el cierre de sesión

Django también proporciona una vista para cerrar la sesión del usuario mediante la URL:

/accounts/logout/

Podemos agregar un formulario en nuestra plantilla para ejecutar el cierre de sesión:

Botón para cerrar sesión
<form method="post" action="{% url 'logout' %}">
    {% csrf_token %}

    <button type="submit">
        Cerrar sesión
    </button>
</form>

Método POST

El cierre de sesión se realiza mediante una solicitud POST, por lo que debemos utilizar un formulario y agregar {% csrf_token %}.

Configurar la redirección después del cierre de sesión

Podemos indicar la página a la que será enviado el usuario después de cerrar sesión mediante LOGOUT_REDIRECT_URL:

_site/settings.py
LOGOUT_REDIRECT_URL = '/'

Así, después de cerrar la sesión, Django redirigirá automáticamente al usuario hacia la página principal.

Proteger contenido para usuarios autenticados

También podemos restringir determinadas vistas para que solamente puedan acceder usuarios que hayan iniciado sesión.

Para ello, podemos utilizar el decorador login_required:

from django.contrib.auth.decorators import login_required
from django.shortcuts import render


@login_required
def dashboard(request):
    return render(request, 'dashboard.html')

Si un usuario no autenticado intenta acceder a esta vista, Django lo redirigirá hacia la página de inicio de sesión.