Crear una aplicación de tareas con framework Django 5

Esta aplicación se desarrolla siguiendo la documentación oficial de Django Project.

Paso 1. Crea un proyecto django desde la terminal

$ django-admin startproject google

Accesa a la carpeta del proyecto recién creado: google

$ cd google

Crea la aplicacion tasks dentro de la carpeta google

python3 manage.py startapp tasks

Sal de la carpeta google, tecleando en terminal:

$ cd ..

Muestra las carpetas y archivos creados, tecleando en terminal

$ ls -l

Para ver las carpetas y archivos como estructura de árbol, teclear en terminal:

$ tree google

El resultado es:


google/
├── google
│   ├── asgi.py
│   ├── init.py
│   ├── pycache
│   │   ├── init.cpython-312.pyc
│   │   └── settings.cpython-312.pyc
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── manage.py
└── tasks
├── admin.py
├── apps.py
├── init.py
├── migrations
│   └── init.py
├── models.py
├── tests.py
└── views.py

Entra nuevamente a la carpeta del proyecto

cd google

Correr el servidor web Django

python3 manage.py runserver

Abre el navegador web de tu elección (Chrome, Firefox, Safari, Opera, Microsoft Edge) y teclea en la barra de direccion:

localhost:8000

O puedes teclear también en la barra de dirección una IP local con puerto 8000:

127.0.0.1:8000

En cualquier caso. El resultado es la siguiente pantalla: Django Framework version 5.1

django version 5.1 webserver running
Django version 5.1 – Servidor web corriendo.

Detén el servidor web Django, presionado las teclas en terminal:

Control + C

Crear una vista con framework Django

Abre la carpeta del proyecto google tasks con el editor de código Visual Studio Code, tecleando en terminal:

$ code .

Abre el archivo ubicado en la carpeta aplicación tasks/views.py y coloca el siguiente código en lenguaje de programación Python.

from django.http import HttpResponse

def index(request):
    return HttpResponse("Pagina Web: Tasks Index")

Agrega la vista al enrutador. Crea el siguiente archivo en la ubicación de la carpeta aplicación tasks/urls.py y coloca el siguiente código en lenguaje de programación Python.

from django.urls import path
from . import views 

urlpatterns = [
  path("", views.index, name="index"),
]

Agrega la ruta de la aplicación al proyecto . Abre el archivo ubicado en la carpeta proyecto google/urls.py y coloca el siguiente código en lenguaje de programación Python.

from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path("tasks/", include("tasks.urls")),
    path("admin/", admin.site.urls),
]

Corre el servidor web Django

$ python3 manage.py runserver

Abre el navegador web de tu elección (Chrome, Firefox, Safari, Opera, Microsoft Edge) y teclea en la barra de dirección:

localhost:8000/tasks
Página web index para  aplicación tasks de Django

Detén el servidor web Django, presionado las teclas en terminal:

Control + C

Configurar base de datos (Tutorial 02)

Abre el archivo ubicado en la carpeta aplicación google/settings.py

Cambia el nombre de la base de datos

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'google.sqlite3',
    }
}

Agrega la aplicación tasks.

INSTALLED_APPS = [
  'tasks.apps.TasksConfig',
  ...
]

Edita el idioma de la aplicación admin

LANGUAGE_CODE = 'en-us'

Edita la zona horaria

TIME_ZONE = 'America/Cancun'

Ejecuta la migración en la terminal

$ python manage.py migrate

La salida en la terminal

$ python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying admin.0003_logentry_add_action_flag_choices... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK
  Applying auth.0012_alter_user_first_name_max_length... OK
  Applying sessions.0001_initial... OK

Corre el servidor web Django

$ python3 manage.py runserver

Abre el navegador web de tu elección (Chrome, Firefox, Safari, Opera, Microsoft Edge) y teclea en la barra de dirección:

localhost:8000/admin
Página web login para aplicación tasks de Django
Página web login para aplicación tasks de Django

Aunque puedas ver el inicio de sesión, aún no se ha creado una cuenta administrador, más adelante podrás accesar.

Crear un modelo con framework Django

Abre el archivo ubicado en la carpeta aplicación /tasks/models.py y agrega el siguiente código en lenguaje de programación Python.

from django.db import models

class List(models.Model):
  list_name_text = models.CharField(max_length=50)
  color_text = models.CharField(max_length=10)

class Task(models.Model):
  list = models.ForeignKey(List, on_delete=models.CASCADE)
  title = models.CharField(max_length=30)
  description = models.TextField()
  date = models.DateField()
  time = models.TimeField()    

Explicación.

Se usó método ForeignKey() para crear relación de uno a muchos entre tablas, List y Task de la base de datos.

Activando el modelo

Una vez hecho los cambios en el modelo.

Crea una migración llamada tasks en la terminal:

python manage.py makemigrations tasks

Se creó un archivo de migración. La salida en la terminal:

$ python manage.py makemigrations tasks
Migrations for 'tasks':
  tasks\migrations\0001_initial.py
    + Create model List
    + Create model Task

Ejecuta los siguientes comandos en la terminal para generar código SQL basado en las especificaciones del archivo de migración 0001_initial.py.

$ python manage.py sqlmigrate tasks 0001

Se creó un archivo con código SQL. La salida en la terminal:

BEGIN;
--
-- Create model List
--
CREATE TABLE "tasks_list" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "list_name_text" varchar(50) NOT NULL, "color_text" varchar(10) NOT NULL);
--
-- Create model Task
--
CREATE TABLE "tasks_task" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "title" varchar(30) NOT NULL, "description" text NOT NULL, "date" date NOT NULL, "time" time NOT NULL, "list_id" bigint NOT NULL REFERENCES "tasks_list" ("id") DEFERRABLE INITIALLY DEFERRED); CREATE INDEX "tasks_task_list_id_c7514fc6" ON "tasks_task" ("list_id");
COMMIT;

Ejecuta la nueva migracion para que creen las tablas en la base de datos

$ python manage.py migrate

La salida en la terminal:

$ python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions, tasks Running migrations:
  Applying tasks.0001_initial... OK

Introducción a la aplicación Django Admin

La aplicación Admin de Django es un sistema de autenticación, esto quiere decir que el acceso a la aplicación es por medio de inicio de sesión y requiere de usuario y contraseña.

Crea un usuario administrador, escribiendo en la terminal los siguientes comandos:

$ python manage.py createsuperuser

Escribe un nombre de usuario, correo electrónico y contraseña:

Username: admin
Email address: admin@gmail.com
Password: ****
Password (again): ****
Superuser created successfully.

Ejecuta el servidor

$ python3 manage.py runserver

Abre el navegador en la direccion: localhost:8000/admin

Backend de aplicación Admin de Django
Backend de aplicación Admin de Django

Observa que no se ve algún componente de la aplicación Tasks.

Abre el archivo tasks/admin.py y agrega el siguiente código

from django.contrib import admin
from .models import List, Task

admin.site.register(List)
admin.site.register(Task)

Actualiza la página web en el navegador para poder ver los componentes recién creados:

Crea registros para lista y para tareas desde la aplicación admin de Django.

Title of ListColor
Tasks app#192a80
Interfaces with bootstrap 5#ffbf34 
Deploy app on Cloud Server #3ded97

Crea las siguientes tareas para la listas:

ListTitleDescriptionDateTime
Tasks appCreate a view.Edit view.py file for index and create a route in urls.py.2024-12-1108:00
Tasks appCreate a model.Edit models.py file to specify a fields list.2024-12-1209:00
Tasks appCreate a migration.Run the migration file to create tables on database.2024-12-1310:00
Interfaces with bootstrap 5Create a migration.Run the migration file to create tables on database.2024-12-1310:00
Interfaces with bootstrap 5Create a migration.Run the migration file to create tables on database.2024-12-1310:00
Interfaces with bootstrap 5Create a migration.Run the migration file to create tables on database.2024-12-1310:00
Deploy app on Cloud ServerCreate a migration.Run the migration file to create tables on database.2024-12-1310:00
Deploy app on Cloud ServerCreate a migration.Run the migration file to create tables on database.2024-12-1310:00
Deploy app on Cloud ServerCreate a migration.Run the migration file to create tables on database.2024-12-1310:00

El primer registro se ve asi:

Nueva tarea de Tasks app Django
Nueva tarea de Tasks app Django

Una vez capturado el primer registro podrá ver que el registro dice: List object (1). Lo cual no es una representación útil del objeto.

Abra el archivo tasks/models.py.

Agrega el codigo resaltado en negrita (método __srt__) a ambos modelos: List y Task.

from django.db import models

class List(models.Model):
  list_name_text = models.CharField(max_length=50)
  color_text = models.CharField(max_length=10)

  def __str__(self):
    return self.list_name_text

class Task(models.Model):
  list = models.ForeignKey(List, on_delete=models.CASCADE)
  title = models.CharField(max_length=30)
  description = models.TextField()
  date = models.DateField()
  time = models.TimeField()

  def __str__(self):
    return self.title
    

El resultado en pantalla es:

representacion del objeto para aplicacion tasks de django
Representacion del objeto para aplicación tasks de django

Leave a Reply

Your email address will not be published. Required fields are marked *