Cómo crear una página web con Django: Guía paso a paso para principiantes

Crear una página web dinámica y robusta puede parecer complejo, pero con frameworks como Django, el proceso se simplifica. Django es un marco de desarrollo web de alto nivel, escrito en Python, que promueve el desarrollo rápido y un diseño limpio. Su filosofía «Batteries Included» (pilas incluidas) significa que ofrece la mayoría de las funcionalidades que un desarrollador necesita, como un sistema ORM, panel de administración, autenticación de usuarios o gestión de URLs, permitiéndote concentrarte en la lógica de tu aplicación en lugar de reinventar la rueda. Este tutorial te guiará paso a paso en la creación de la estructura básica de un sitio web con Django, enfatizando la organización en aplicaciones reutilizables, un pilar fundamental en la arquitectura de este framework.

Configuración del Entorno de Desarrollo

Antes de sumergirnos en la creación del proyecto, es crucial preparar tu entorno de desarrollo. La mejor práctica en Python es trabajar con entornos virtuales. Esto aísla las dependencias de tu proyecto de las del sistema global, evitando conflictos entre diferentes proyectos.

Creación y Activación de un Entorno Virtual

Para iniciar un entorno virtual, navega hasta el directorio donde deseas ubicar tu proyecto y ejecuta los siguientes comandos en tu terminal. Se recomienda un nombre descriptivo para el entorno, como `venv`.

python3 -m venv venv

Una vez creado el entorno virtual, actívalo. El comando varía ligeramente según tu sistema operativo:

  • En macOS/Linux:
    source venv/bin/activate
  • En Windows:
    venv\Scripts\activate

Verás que el nombre de tu entorno virtual (`venv`) aparece al inicio de tu prompt de terminal, indicando que está activo y listo para instalar Django.

Instalación de Django

Con el entorno virtual activo, instala Django usando `pip`, el gestor de paquetes de Python:

pip install Django

Esto instalará la última versión estable de Django y sus dependencias necesarias.

Iniciando tu Proyecto Django

Django, código, web, progreso, ilustrado, limpio, alegre

Un proyecto Django es la configuración completa de un sitio web, incluyendo ajustes de base de datos, configuraciones específicas de aplicaciones y la configuración general.

Creación del Proyecto

Para crear tu proyecto, usa el comando `django-admin startproject`. Es buena práctica ejecutarlo un nivel por encima de donde quieres que resida la carpeta de tu proyecto, para mantener una estructura de directorio limpia. Por ejemplo, si quieres que tu proyecto se llame `mysite` y esté en la carpeta actual, usarías:

django-admin startproject mysite .

El punto (`.`) al final es importante, ya que indica que el proyecto debe crearse en el directorio actual, evitando una carpeta anidada extra llamada `mysite`. Si omitieras el punto, Django crearía un directorio `mysite` que contendría otro directorio `mysite` y `manage.py`.

Estructura Inicial del Proyecto

Después de ejecutar el comando, la estructura de tu directorio debería verse así:


myproject/
├── manage.py
├── mysite/
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   ├── wsgi.py
└── requirements.txt (si se genera manualmente o con pip freeze)
  • `manage.py`: Un script de línea de comandos que te permite interactuar con tu proyecto Django. Lo usarás para ejecutar el servidor de desarrollo, realizar migraciones de base de datos, crear aplicaciones, entre otras funciones.
  • `mysite/` (carpeta interna): Este es el paquete Python real de tu proyecto. Su nombre es el nombre del proyecto también.
  • `mysite/__init__.py`: Un archivo vacío que indica a Python que este directorio debe tratarse como un paquete Python.
  • `mysite/settings.py`: Contiene la configuración de tu proyecto Django, como la configuración de la base de datos, las aplicaciones instaladas, la zona horaria, archivos estáticos, etc.
  • `mysite/urls.py`: Aquí es donde se declara el mapeo de URL para todo el proyecto. Es la «tabla de contenidos» de tu sitio.
  • `mysite/wsgi.py`: Un punto de entrada para servidores web compatibles con WSGI para servir tu proyecto.

El proyecto en sí mismo se gestiona mediante el comando manage.py, que centraliza operaciones como ejecutar el servidor de desarrollo, crear aplicaciones, manejar migraciones de base de datos, entre otras.

Configuraciones Iniciales en `settings.py`

Dentro de `mysite/settings.py`, hay algunas configuraciones cruciales que debes revisar o ajustar:

  • `SECRET_KEY`: Una clave secreta única para tu instalación de Django. Se utiliza para proporcionar seguridad criptográfica y no debe ser compartida. En producción, se recomienda obtenerla de una variable de entorno.
  • `DEBUG`: Un booleano que activa/desactiva el modo de depuración. En desarrollo, `True` es ideal, ya que proporciona páginas de error detalladas. En producción siempre debe ser `False` por motivos de seguridad.
  • `ALLOWED_HOSTS`: Una lista de cadenas que representan los nombres de host/IP que pueden servir tu proyecto Django. En modo `DEBUG=True`, puede estar vacía. Para producción, debes especificar los dominios y subdominios de tu sitio (ej. `[‘127.0.0.1’, ‘.pythonanywhere.com’]`).
  • `INSTALLED_APPS`: Una lista de cadenas que incluyen todas las aplicaciones de Django activadas en este proyecto. Inicialmente, incluirá las aplicaciones por defecto de Django para administración, autenticación, sesiones, etc.
  • `DATABASES`: Configura la conexión a tu base de datos. Por defecto, Django configura SQLite para desarrollo, lo cual es suficiente para empezar.
  • `TIME_ZONE`: Se recomienda cambiar `America/Caracas` por la zona horaria de tu preferencia para asegurar la correcta gestión de fechas y horas.
  • `LANGUAGE_CODE`: Puedes cambiar `en-us` a `es-ve` o a tu código de idioma preferido para que el panel de administración y los mensajes de Django se muestren en el idioma seleccionado.

Creando tu Primera Aplicación

Diseño web Django: guía práctica sencilla

En Django, los proyectos se componen de una o más «aplicaciones». Una aplicación es un módulo autónomo que realiza una función específica (por ejemplo, un blog, un sistema de comentarios, un carrito de compras). La filosofía es que las aplicaciones sean reutilizables en diferentes proyectos.

Ejecutando `startapp`

Para crear una aplicación, navega hasta el directorio que contiene `manage.py` (el directorio raíz de tu proyecto) y ejecuta el siguiente comando. Nombrémosla `catalog` a modo de ejemplo:

python3 manage.py startapp catalog

Estructura de la Aplicación

Esto creará una nueva carpeta `catalog` dentro de tu proyecto, con la siguiente estructura:


catalog/
├── migrations/
│   └── __init__.py
├── __init__.py
├── admin.py
├── apps.py
├── models.py
├── tests.py
├── views.py
  • `admin.py`: Aquí registrarás tus modelos para que aparezcan en el panel de administración de Django.
  • `apps.py`: Contiene la configuración específica de tu aplicación.
  • `models.py`: Donde definirás la estructura de tu base de datos (tus modelos de datos).
  • `views.py`: Contiene las funciones o clases que manejarán las solicitudes web y devolverán respuestas (las «vistas» de tu aplicación).

Registrando y Conectando la Aplicación

Para que Django reconozca y utilice tu nueva aplicación, debes registrarla en el proyecto y configurar sus URLs.

Registrar la Aplicación en `settings.py`

Abre `mysite/settings.py` y añade el nombre configurado de tu aplicación a la lista `INSTALLED_APPS`. El nombre correcto para agregar se encuentra en el archivo `apps.py` de la aplicación (ej. `CatalogConfig`).


# mysite/settings.py
INSTALLED_APPS = [
    # ... otras aplicaciones de Django ...
    'catalog.apps.CatalogConfig', # Tu nueva aplicación
]

Configuración de Mapeos URL

Cada aplicación debería tener su propio archivo `urls.py` para manejar sus rutas específicas.

Crear `urls.py` en la Aplicación

Dentro de la carpeta `catalog/`, crea un nuevo archivo llamado `urls.py`. Aquí definirás las URL de tu aplicación `catalog`. Por ahora, podemos dejarlo simple:


# catalog/urls.py
from django.urls import path
from . import views

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

Este código asume que tendrás una vista llamada `index` en tu archivo `views.py`. Vamos a crearla:


# catalog/views.py
from django.shortcuts import render

def index(request):
    return render(request, 'catalog/index.html')

También necesitarás un directorio `templates` dentro de la carpeta `catalog`, y un archivo `index.html` dentro de `catalog/templates/catalog/`:








    
    Mi Catálogo


    

¡Bienvenido a mi Catálogo!

Incluir las URLs de la Aplicación en el Proyecto Principal

Ahora, debes incluir estas URLs de la aplicación en el archivo `urls.py` principal del proyecto (`mysite/urls.py`).


# mysite/urls.py
from django.contrib import admin
from django.urls import path, include
from django.views.generic import RedirectView # Para redirecciones

urlpatterns = [
    path('admin/', admin.site.urls),
    path('catalog/', include('catalog.urls')),
    path('', RedirectView.as_view(url='catalog/', permanent=True)), # Redirección de la raíz
]

En este ejemplo, cualquier URL que comience con `catalog/` será gestionada por el archivo `catalog/urls.py`. La línea con `RedirectView` es un ejemplo práctico de cómo redirigir la URL raíz (`/`) a `catalog/`. `permanent=True` indica que es una redirección HTTP 301.

Gestión de Archivos Estáticos

Los archivos estáticos (CSS, JavaScript, imágenes) son esenciales para el diseño y la funcionalidad de tu sitio web. Django tiene un sistema para gestionarlos.

Configuración del `STATIC_URL` y `STATIC_ROOT`

En `mysite/settings.py`, ya encontrarás `STATIC_URL = ‘/static/’`. Esto define la URL que se utiliza para servir archivos estáticos. Para el despliegue en producción, también necesitarás `STATIC_ROOT`, que es el directorio donde Django recolectará todos los archivos estáticos de tus aplicaciones.


# mysite/settings.py
import os # Asegúrate de que esta línea esté al inicio

# ...
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')

Durante el desarrollo, puedes servir archivos estáticos directamente desde las aplicaciones, pero en producción, con `DEBUG=False`, deberás ejecutar `python manage.py collectstatic` para reunir todos los archivos estáticos en `STATIC_ROOT`.

Para servir archivos estáticos durante el desarrollo, puedes añadir lo siguiente a tus `urlpatterns` principales (solo para entorno de desarrollo):


# mysite/urls.py (final del archivo, dentro de la condicional DEBUG)
from django.conf import settings
from django.conf.urls.static import static

if settings.DEBUG:
    urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

Preparando la Base de Datos y Ejecutando el Servidor

Antes de ejecutar tu sitio, necesitas asegurarte de que la base de datos esté sincronizada con tus modelos.

Realizando Migraciones

Django utiliza migraciones para aplicar cambios en tus modelos de base de datos.
Primero, crea los archivos de migración basados en los modelos de Django incorporados (y los que tú definas):

python3 manage.py makemigrations

Este comando inspecciona todos los modelos en tus `INSTALLED_APPS` (incluyendo los de Django) y crea scripts de migración. Luego, aplica estas migraciones a tu base de datos:

python3 manage.py migrate

Esto creará las tablas necesarias en tu base de datos (por defecto, `db.sqlite3` en la raíz de tu proyecto).

Arrancando el Servidor de Desarrollo

Finalmente, puedes iniciar el servidor de desarrollo de Django:

python3 manage.py runserver

Si estás usando un entorno como Cloud9 o Chromebook, es posible que necesites especificar la dirección y el puerto:

python3 manage.py runserver 0.0.0.0:8080

Una vez que el servidor está en ejecución, puedes abrir tu navegador web y navegar a `http://127.0.0.1:8000/` (o la dirección proporcionada por tu entorno de desarrollo, como la de Cloud9). Deberías ver la página de bienvenida de tu aplicación `catalog` gracias a la redirección que configuramos.

El servidor de desarrollo ocupará tu terminal. Si necesitas ejecutar otros comandos de `manage.py`, deberás abrir una nueva ventana de terminal o detener el servidor actual (`CTRL+C`).

Próximos Pasos y Consideraciones Importantes

Has establecido la estructura básica de tu proyecto Django y tu primera aplicación. El siguiente paso natural es empezar a definir tus modelos de datos en `catalog/models.py`, crear más vistas, conectar URL a esas vistas y desarrollar las plantillas HTML para mostrar tu contenido.

Errores Frecuentes y Cómo Abordarlos

Django es muy informativo con sus páginas de error, especialmente cuando `DEBUG` está en `True`. Presta atención a los rastreos de pila (tracebacks), ya que suelen indicar el archivo y la línea exactos donde ocurrió el problema. Errores comunes incluyen:

  • **`ModuleNotFound` o `ImproperlyConfigured`**: Revisa si la aplicación está correctamente añadida a `INSTALLED_APPS` en `settings.py` o si los nombres de los módulos en `urls.py` son correctos.
  • **`NameError`**: Asegúrate de que las funciones de vista están definidas correctamente y que se importan en `urls.py`.
  • **`TemplateDoesNotExist`**: Verifica que el nombre del archivo de la plantilla en `render()` sea exacto y que su ruta dentro de la carpeta `templates` sea la esperada por Django.

Reutilizabilidad de Aplicaciones

Recuerda la importancia de diseñar tus aplicaciones de Django para que sean modulares y reutilizables. Esto significa mantener la lógica de una funcionalidad específica (como un blog, un foro, etc.) contenida dentro de su propia aplicación. De esta manera, si necesitas esa misma funcionalidad en otro proyecto Django, puedes simplemente copiar la aplicación, instalarla y configurarla.

El objetivo de esta guía ha sido proporcionarte una base sólida para construir tu proyecto web con Django, permitiéndote comprender la arquitectura fundamental del framework y cómo sus componentes interactúan para formar un sitio web funcional.

Deja un comentario

Scroll al inicio