Guía 26: Django - Django Admin (Autorizació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#
Paquete: PyMySQL#
Instale PyMySQL en su ambiente de desarrollo:
pip install PyMySQL
Utilice su cliente de IAG generativa para explicar el propósito del paquete PyMySQL en Python y cómo se utiliza para conectarse a bases de datos MySQL en Django.
Conexión a la base de datos#
Edite el archivo
backend_analytics_server/settings.pyde su proyecto Django, con:Importe el paquete PyMySQL:
... from pathlib import Path import os import pymysql pymysql.install_as_MySQLdb() ...
Reemplace la configuración por defecto por la conexión a la base de datos MySQL utilizando PyMySQL:
... DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': os.environ.get('MYSQLDATABASE'), 'USER': os.environ.get('MYSQLUSER'), 'PASSWORD': os.environ.get('MYSQLPASSWORD'), 'HOST': os.environ.get('MYSQLHOST'), 'PORT': os.environ.get('MYSQLPORT'), } } ...
En la terminal establezca las variables de entorno para la conexión a la base de datos MySQL, con:
# Linux/MacOS export MYSQLDATABASE=security export MYSQLUSER=root export MYSQLPASSWORD=root export MYSQLHOST=localhost export MYSQLPORT=3306 # Verifique las variables de entorno echo $MYSQLDATABASE # Windows set MYSQLDATABASE=security set MYSQLUSER=root set MYSQLPASSWORD=root set MYSQLHOST=localhost set MYSQLPORT=3306 # Verifique las variables de entorno echo %MYSQLDATABASE%
Nota
Asegúrese de reemplazar los valores con los datos correctos de su base de datos MySQL.
Con MySQL Workbench o su cliente de MySQL, cree la base de datos security si no existe
Utilice su cliente de IAG generativa para explicar cómo se configura la conexión a una base de datos MySQL en Django utilizando PyMySQL y las variables de entorno.
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
Cree los usuarios usuario01 y usuario02, sin permisos o pertenencia a algún grupo
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/.
Nota
Compruebe que el acceso a la vista principal del dashboard redirige a la vista de inicio de sesión si no está autenticado.
Autorización#
Restricción de permiso: decorador @permission_required#
Edite el archivo
dashboard/views.py, con:... from django.contrib.auth.decorators import login_required, permission_required @login_required @permission_required('dashboard.index_viewer', raise_exception=True) 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 autorización para los usuarios usuario01 y usuario02; mientras, el superusuario tiene acceso sin restricciones.
Utilice su cliente de IAG para explicar el uso del decorador @permission_required en Django.
Modelo con permisos#
Edite el archivo
dashboard/models.py, con la definición del modelo DashboardModel con permisos personalizados:... # Create your models here. class DashboardModel(models.Model): class Meta: permissions = [ ("index_viewer", "Can show to index view (function-based)"), ]
Genere las migraciones de la base de datos, con:
python manage.py makemigrations python manage.py migrate
Levante el servidor de desarrollo, con:
python manage.py runserver
Use el panel de administración de Django http://127.0.0.1:8000/admin/, para:
Modificar solo el usuario usuario01
En User permissions, agregue el permiso Dashboard | dashboard model | Can show to index view (function-based).
Guarde los cambios.
Revise los cambios en el navegador con la URL http://127.0.0.1:8000/.
Nota
Compruebe que el usuario usuario01 puede acceder a la vista principal del dashboard, mientras que el usuario usuario02 recibe un error de autorización; mientras, el superusuario tiene acceso sin restricciones
Utilice su cliente de IAG para explicar el uso de los permisos personalizados en modelos de Django y cómo se aplican a las vistas.
403 Forbidden#
Descargue y descomprima el archivo
403.zip.Ubique el archivo
403.htmlen la carpeta templates/.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/.
Nota
Compruebe que el usuario usuario02 recibe un error 403 Forbidden al intentar acceder a la vista principal del dashboard, y que se muestra la plantilla personalizada.
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
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:
Django is a high-level Python web development framework that lets you build secure, scalable apps.
— freeCodeCamp.org (@freeCodeCamp) May 6, 2025
And this crash course teaches you the basics so you can start using it.
You'll learn about django-admin & https://t.co/T2lmhj4NZm, the Model-View-Template pattern, how forms work,… pic.twitter.com/G3ZRyfVpb5