Proyecto básico con Django

Django es un framework de desarrollo web de alto nivel y de código abierto que permite construir aplicaciones web rápidamente, siguiendo el principio de “baterías incluidas”. Desarrollado en Python, Django se destaca por su diseño pragmático, su enfoque en la eficiencia y su énfasis en la reutilización de código.

Con Django, los desarrolladores pueden crear aplicaciones web complejas y escalables de manera más sencilla, gracias a su conjunto integrado de herramientas y funcionalidades. Proporciona una arquitectura MVC (Modelo-Vista-Controlador) que facilita la separación de la lógica de negocio de la presentación de la información, lo que resulta en un código más limpio y mantenible.

Este proyecto forma parte de una conferencia para la Universidad de San Carlos de Guatemala, puedes ver la conferencia completa en este enlace.

Este proyecto Django es una aplicación simple de librería. Incluye modelos para libros, vistas para manejar la visualización de libros y plantillas para la interfaz de usuario.

Modelos

El modelo Book está definido en books/models.py. Tiene los siguientes campos:

  • name: Un CharField para almacenar el nombre del libro.
  • description: Un CharField para almacenar una breve descripción del libro.
  • published: Un DateField para almacenar la fecha de publicación del libro.
  • picture_url: Un URLField para almacenar la URL de la imagen de portada del libro.
  • price: Un DecimalField para almacenar el precio del libro.

El modelo Book también incluye un método get_absolute_url, que devuelve la URL para acceder a una instancia particular del modelo.

Vistas

Las vistas en Django son funciones o clases que toman una solicitud web y devuelven una respuesta web. Las vistas acceden a los datos necesarios para satisfacer las solicitudes, a través de los modelos, y delegan en las plantillas la presentación de los datos al usuario. Las siguientes vistas se encuentran definidas en books/views.py:

  1. BookListView: Esta es una vista basada en clase que hereda de ListViewListView es una vista genérica que proporciona una forma de listar un conjunto de objetos. En este caso, BookListView se utiliza para mostrar una lista de todos los libros. La lista de libros se obtiene de la base de datos utilizando el modelo Book.
  2. BookDetailView: Esta es otra vista basada en clase que hereda de DetailViewDetailView es una vista genérica que proporciona una forma de mostrar un objeto único. En este caso, BookDetailView se utiliza para mostrar los detalles de un libro específico. El libro se obtiene de la base de datos utilizando el modelo Book y el ID del libro proporcionado en la URL.
  3. BookDeleteView: Esta es una vista basada en clase que hereda de DeleteViewDeleteView es una vista genérica que proporciona una forma de eliminar un objeto único. En este caso, BookDeleteView se utiliza para eliminar un libro específico. El libro se obtiene de la base de datos utilizando el modelo Book y el ID del libro proporcionado en la URL.

Cada una de estas vistas tiene un método get_queryset que define cómo se obtienen los objetos de la base de datos. También tienen un atributo template_name que define la plantilla que se utilizará para presentar los datos al usuario.

URLs

El archivo urls.py en Django es fundamental para definir las URL de tu aplicación. Este archivo actúa como un mapa que vincula las URL de tu aplicación con las vistas que las gestionan. A continuación, se explica cómo funciona este archivo en el contexto de tu proyecto de librería:

  1. Importaciones de Django y vistas: Al principio del archivo, se importan las funciones y clases necesarias tanto de Django como de tus propios archivos de vistas.
from django.urls import path
from . import views
  1. Definición de urlpatterns: Se define una lista llamada urlpatterns, que contiene objetos path que definen las rutas de URL para tu aplicación.
urlpatterns = [
    # Ejemplos de patrones de URL
]
  1. Mapeo de URL a vistas: Cada objeto path en urlpatterns especifica una ruta de URL y la vista asociada que manejará las solicitudes a esa URL.
urlpatterns = [
    path('books/', views.BookListView.as_view(), name='book-list'),
    # Más patrones de URL aquí
]
  1. Manejo de parámetros en las URL: Algunas rutas de URL pueden contener parámetros, los cuales son capturados y pasados a la vista como argumentos.
urlpatterns = [
    path('books/<int:pk>/', views.BookDetailView.as_view(), name='book-detail'),
    # Otros patrones de URL aquí
]
  1. Inclusión de URL del proyecto principal: Todas estas rutas de URL definidas en urls.py de la aplicación se incluyen en el archivo urls.py principal del proyecto Django, utilizando la función include.
from django.urls import include

urlpatterns = [
    path('bookstore/', include('books.urls')),
    # Otros patrones de URL del proyecto principal aquí
]

El archivo urls.py en Django sirve como un mapa que asigna las URL de tu aplicación a las vistas correspondientes, permitiendo así la navegación efectiva a través de tu aplicación web.

Plantillas

Las plantillas en Django son archivos HTML que permiten la inserción de datos dinámicos generados por Django. Las plantillas también admiten la herencia de plantillas, lo que permite reutilizar partes comunes de tu sitio web, como encabezados, pies de página, etc.

Las plantillas se encuentran en la carpeta templates/. Aquí hay una descripción de cómo funcionan:

  1. _base.html: Esta es la plantilla base. Define la estructura básica de todas las páginas de tu sitio web, como la etiqueta <!DOCTYPE html>, las etiquetas <html><head> y <body>, y cualquier CSS o JavaScript que quieras incluir en todas tus páginas. También define bloques que pueden ser reemplazados por las plantillas que heredan de esta base, como {% block content %}.
  2. book_list.html: Esta plantilla se utiliza para mostrar la lista de libros. Hereda de _base.html y reemplaza el bloque content con el HTML necesario para mostrar la lista de libros. Utiliza la etiqueta de plantilla {% for %} para iterar sobre todos los libros y mostrar sus detalles.
  3. book_detail.html: Esta plantilla se utiliza para mostrar los detalles de un libro específico. Al igual que book_list.html, hereda de _base.html y reemplaza el bloque content. Utiliza las etiquetas de plantilla {% if %} y {% else %} para mostrar diferentes contenidos dependiendo de si el libro existe o no.
  4. book_confirm_delete.html: Esta plantilla se utiliza para confirmar la eliminación de un libro. Hereda de _base.html y reemplaza el bloque content con el HTML necesario para mostrar el mensaje de confirmación y los botones de confirmación y cancelación.

Las plantillas utilizan el lenguaje de plantillas de Django, que incluye etiquetas como {% for %}{% if %}{% block %}{% extends %}, y variables como {{ book.name }}, para insertar datos dinámicos en el HTML.

Configuraciones

El archivo settings.py en un proyecto Django es donde se configuran todas las configuraciones de tu aplicación. Aquí hay una descripción de algunas de las configuraciones más importantes en tu proyecto de librería:

  1. INSTALLED_APPS: Esta es una lista de todas las aplicaciones que están instaladas en tu proyecto. Una aplicación es un módulo de Django que proporciona alguna funcionalidad. Django viene con varias aplicaciones preinstaladas, como django.contrib.admin para el sitio de administración, django.contrib.auth para el sistema de autenticación, y django.contrib.contenttypes para los tipos de contenido. También debes agregar tus propias aplicaciones a esta lista.
  2. MIDDLEWARE: Esta es una lista de todas las clases de middleware que se utilizan en tu proyecto. El middleware es una serie de ganchos que Django utiliza para procesar las solicitudes y respuestas. Django viene con varios middleware preinstalados, como django.middleware.security.SecurityMiddleware para varias mejoras de seguridad, y django.contrib.sessions.middleware.SessionMiddleware para manejar las sesiones.
  3. ROOT_URLCONF: Esta es la ruta de Python al módulo de configuración de URL de tu proyecto. Por defecto, esto es 'nombre_del_proyecto.urls', donde nombre_del_proyecto es el nombre de tu proyecto.
  4. TEMPLATES: Esta es una lista de configuraciones de los motores de plantillas de tu proyecto. Django viene con su propio motor de plantillas, pero también puedes añadir otros motores de plantillas.
  5. DATABASES: Esta es una configuración del diccionario de todas las bases de datos que utiliza tu proyecto. Por defecto, Django utiliza SQLite, pero puedes cambiar esto a otros sistemas de bases de datos como PostgreSQL, MySQL o Oracle.
  6. STATIC_URL: Esta es la URL que se utilizará para referirse a los archivos estáticos de tu proyecto. Los archivos estáticos son todos tus archivos CSS y JavaScript, imágenes, y otros archivos que no son generados dinámicamente.
  7. SECRET_KEY: Esta es una clave secreta que se utiliza para proporcionar firmas criptográficas. Es importante mantener esta clave secreta y segura.
  8. DEBUG: Esta es una bandera que, cuando se establece en True, activa el modo de depuración en tu proyecto. En el modo de depuración, Django proporciona mensajes de error detallados cuando algo va mal. Sin embargo, nunca debes activar el modo de depuración en producción, ya que podría revelar detalles sensibles sobre tu proyecto.

Ejecución del Proyecto

Para ejecutar el proyecto, utiliza el script manage.py:

python manage.py runserver

Esto iniciará el servidor de desarrollo de Django. Puedes acceder a la aplicación en http://localhost:8000.

Dependencias

Las dependencias del proyecto son gestionadas con pip y se enumeran en los archivos Pipfile y Pipfile.lock. Para instalar las dependencias, utiliza el siguiente comando:

pip install -r requirements.txt

Base de Datos

El proyecto utiliza SQLite como su base de datos, que está configurada en la configuración DATABASES en bookstore/settings.py. El archivo de la base de datos es db.sqlite3.

Archivos Estáticos

Los archivos estáticos (CSS, JavaScript, Imágenes) se encuentran en el directorio static/ y se sirven en la URL /static/. La configuración para los archivos estáticos está en las configuraciones STATIC_* en bookstore/settings.py.

Proyecto básico con Django

El código completo del sistema puede ser descargado desde el siguiente enlace de github.

https://github.com/BranthonyC/IntroduccionADjango/tree/master