Guía 25: Django - Django Admin (Autenticación)#
Actividades previas#
Ambiente de desarrollo#
Acceda a su proyecto django_data_monitor en Codespaces o en su máquina local.
Cree y utilice la(s) rama(s) de desarrollo.
Cree y habilite el ambiente virtual de desarrollo, con:
python -m venv env env\Scripts\activate # Windows source env/bin/activate # Linux/MacOS
Instale las librerías de requirements.txt, con:
pip install -r requirements.txt
Actividades en clases#
Migraciones de base de datos#
Genere las migraciones de la base de datos, con:
python manage.py makemigrations python manage.py migrate
Cree un superusuario para acceder al panel de administración de Django, con:
python manage.py createsuperuser
Utilice su cliente de IAG para explicar las migraciones de base de datos, el uso del panel de administración de Django y el propósito del superusuario.
Configuración de dominios y CSRF#
Modifique el archivo
backend_analytics_server/settings.py, con:... CSRF_TRUSTED_ORIGINS = [ "https://*.app.github.dev", # Solo si utiliza Codespaces "https://localhost:8000", "http://127.0.0.1:8000" ] ALLOWED_HOSTS = [ "*", ] ...
Nota
El uso de ALLOWED_HOSTS con el valor [“*”] es una práctica insegura para producción, pero es aceptable para desarrollo local. En producción, se debe especificar el dominio o subdominio del servidor.
Levante el servidor de desarrollo, con:
python manage.py runserver
Revise los cambios en el navegador con la URL http://127.0.0.1:8000/admin/. Inicie sesión con las credenciales del superusuario y explore el panel de administración.
Cree los usuarios usuario01 y usuario02, sin permisos o pertenencia a algún grupo.
Utilice su cliente de IAG para explicar la configuración de ALLOWED_HOSTS y CSRF_TRUSTED_ORIGINS.
Autenticación#
Restricción de acceso: decorador @login_required#
Edite el archivo
dashboard/views.py, con:... from django.contrib.auth.decorators import login_required @login_required def index(request): ...
Revise los cambios en el navegador con la URL http://127.0.0.1:8000/.
Nota
Compruebe que el acceso a la vista principal del dashboard requiere autenticación, al mostrar el formulario de inicio de sesión.
Utilice su cliente de IAG para explicar el uso del decorador @login_required en Django.
Login: Vista y Plantilla de autenticación#
Descargue y descomprima el archivo
login.zip. Ubique el archivologin.htmlen la carpeta templates/security/.Modifique el archivo
backend_analytics_server/urls.py, con:Importe las vistas predefinidas auth_views.
Agregue las rutas con las vista (basadas en clases) asociadas con el inicio (LoginView) y con el cierre (LogoutView) de sesión.
... from django.contrib.auth import views as auth_views urlpatterns = [ ... # Ruta login/ para la vista LoginView para inicio de sesión, uso de plantilla y alias path('login/', auth_views.LoginView.as_view(template_name='security/login.html'), name='login'), # Ruta logout/ para la vista LogoutView para fin de sesión, redirección y alias path('logout/', auth_views.LogoutView.as_view(next_page='/login/'), name='logout'), ]
Modifique el archivo
backend_analytics_server/settings.py, con:Agregue la constante LOGIN_URL con la URL de inicio de sesión.
Agregue la constante LOGOUT_REDIRECT_URL con la URL raíz del proyecto.
... # Fallo: acceso sin autenticación LOGIN_URL = '/login/' # Éxito: luego de autenticación exitosa LOGIN_REDIRECT_URL = '/'
Revise los cambios en el navegador con la URL http://127.0.0.1:8000/.
Nota
Compruebe que el acceso a la vista principal del dashboard redirige a la vista de inicio de sesión si no está autenticado.
Utilice su cliente de IAG para explicar el uso de las vistas predefinidas LoginView y LogoutView en Django, así como la configuración de las constantes LOGIN_URL y LOGOUT_REDIRECT_URL.
Inicio de sesión#
Edite el archivo
templates/security/login.html, con:Agregue el método post y el atributo action con la URL de inicio de sesión (alias “login”),
Agregue el token CSRF para proteger el formulario,
Agregue el atributo name a los campos de entrada para el nombre de usuario y la contraseña.
... <!-- Método post y action para el URL (con el alias 'login') --> <form method="post" action="{% url 'login' %}"> <!-- CSRF token --> {% csrf_token %} ... <!-- username --> <input name="username" ... > ... <!-- password --> <input name="password" ... > ... </form>
Revise los cambios en el navegador con la URL http://127.0.0.1:8000/.
Nota
Compruebe que la autenticación con las credenciales de los usuarios superusuario, usuario01 y usuario02, se redirija al usuario a la vista principal del dashboard. Y que la autenticación con las credenciales incorrectas redirige al usuario a la vista de inicio de sesión.
Utilice el inspector del navegador para verificar la cookie de sesión.
Fin de sesión#
Modifique
templates/dashboard/partials/header.htmlen el bloque logout, con:... <!-- START - Block Logout --> <!-- Método post y action para el URL (con el alias 'logout') --> <form method="post" action="{% url 'logout' %}" class="w-full"> <!-- CSRF token --> {% csrf_token %} ... </form> <!-- END - Block Logout --> ...
Revise los cambios en el navegador con la URL http://127.0.0.1:8000/.
Nota
Compruebe que el cierre de sesión redirige al usuario a la vista de inicio de sesión.
Utilice su cliente de IAG para explicar el uso del token CSRF en Django y el uso de la cookie de sesión.
Verificación de acceso#
Escenario: Acceso fallido#
Modifique el archivo
templates/security/login.html, con:... <div class="w-full"> {% if form.non_field_errors %} <div id="password_error_div" class="flex items-center justify-center mb-4 py-3 bg-red-100 border-l-4 border-red-500 text-red-700 dark:border-red-400 dark:text-red-500" role="alert">Invalid username or password.</div> {% endif %} <!-- Método post y action para el URL (con el alias 'login') --> <form method="post" action="{% url 'login' %}"> ... </form> ... </div>
Escenario: Acceso exitoso#
Modifique el archivo
templates/partials/header.html, con:... <!-- Profile menu --> <li class="relative"> {% if user.is_authenticated %} <span>{{ user.username }}</span> {% endif %} <button ... > ... </button> </li> ...
Revise los cambios en el navegador con la URL http://127.0.0.1:8000/.
Nota
Compruebe que la autenticación con un usuario no registrado muestra el mensaje de error «Invalid username or password.» y que la autenticación con un usuario registrado muestra el nombre de usuario en el menú de perfil.
Utilice su cliente de IAG para explicar el uso la etiqueta de plantilla
{% if %} ... {% endif %}y los objetos form y user en Django.
Gestión de dependencias#
Genere el archivo requirements.txt con la lista de paquetes utilizados, con:
pip freeze > requirements.txt
Desactive el ambiente virtual de desarrollo, con:
deactivate
Advertencia
Asegúrese que el .gitignore contenga el nombre del archivo db.sqlite3, para no versionar la base de datos en su repositorio.
Versionamiento#
Versione local y remotamente la(s) rama(s) de desarrollo en el repositorio django_data_monitor.
En caso de tener problemas de autenticación al realizar el versionamiento remoto:
Obtenga un Token de acceso personal (clásicos) de tipo Classic, con el alcance (scope) repo.
Copie el token, dado que no podrá volver a verlo.
Borre de memoria cualquier usuario/token que se estuviera guardando temporalmente
git credential-cache exit
Elimine la configuración del credential helper definida a nivel global.
git config --global --unset credential.helper
Reemplace los valores
[REPO-OWNER],[REPO-NAME]y[TOKEN]para modificar el origin.git remote set-url origin https://[REPO-OWNER]:[TOKEN]@github.com/[REPO-OWNER]/[REPO-NAME].git
Genere la(s) solicitud(es) de cambios (pull request) para la rama principal y apruebe los cambios.
Conclusiones#
Actividades autónomas#
Recursos extras#
En redes:
Método de autenticación basada en sesiones en Django:Otros métodos de autenticaciónWhat are web sessions?
— Fernando 🇮🇹🇨🇭 (@Franc0Fernand0) July 26, 2025
Any data exchange on the web is based on a stateless protocol like HTTP.
Every HTTP request is independent of the previous ones.
However, users need to relate the requests to each other.
For example, they want to stay logged in to a website… pic.twitter.com/6yYQSGv2MP
Authentication in REST APIs acts as the crucial gateway, ensuring that solely authorized users or applications gain access to the API's resources.
— Alex Xu (@alexxubyte) December 19, 2023
Some popular authentication methods for REST APIs include:
1. Basic Authentication:
Involves sending a username and password with… pic.twitter.com/Y4CKqZUhBF