Estructura de un Proyecto en Django

Introducción a la Estructura de Directorios

Un proyecto Django típico tiene una estructura de directorios específica que facilita la organización y escalabilidad de la aplicación. Aquí te presento la estructura básica con explicaciones detalladas:

bash
mi_proyecto_django/
│
├── mi_proyecto/                # Directorio raíz del proyecto
│   ├── __init__.py             # Archivo que marca el directorio como un paquete Python
│   ├── asgi.py                 # Punto de entrada para servidores ASGI (para async)
│   ├── settings.py             # Configuraciones centrales del proyecto
│   ├── urls.py                 # Configuración de URLs principal
│   └── wsgi.py                 # Punto de entrada para servidores WSGI
│
├── apps/                       # Directorio para aplicaciones personalizadas
│   ├── usuarios/               # Ejemplo de una aplicación
│   │   ├── __init__.py
│   │   ├── admin.py            # Configuración del admin de Django
│   │   ├── apps.py             # Configuración de la aplicación
│   │   ├── models.py           # Modelos de datos
│   │   ├── tests.py            # Pruebas unitarias
│   │   ├── views.py            # Vistas de la aplicación
│   │   └── urls.py             # URLs específicas de la aplicación
│   └── blog/                   # Otra aplicación de ejemplo
│
├── templates/                  # Directorio central de templates
│   ├── base.html               # Template base
│   ├── usuarios/               # Templates específicas de aplicaciones
│   └── blog/
│
├── static/                     # Archivos estáticos globales
│   ├── css/
│   ├── js/
│   └── images/
│
├── media/                      # Archivos subidos por usuarios
│
├── requirements.txt            # Dependencias del proyecto
├── manage.py                   # Utilidad de línea de comandos de Django
└── README.md                   # Documentación del proyecto

Explicación Detallada de Componentes


Directorio Raíz del Proyecto

1__init__.py
  • Indica que el directorio es un paquete Python
  • Vacío por defecto
  • Permite importaciones y configuraciones iniciales si es necesario
1settings.py
  • Configuraciones centrales del proyecto
  • Incluye configuraciones de base de datos, aplicaciones instaladas, middleware, etc.

Ejemplo de configuración:

python
import os
from pathlib import Path
from dotenv import load_dotenv

# Cargar variables de entorno
load_dotenv()

BASE_DIR = Path(__file__).resolve().parent.parent

SECRET_KEY = os.getenv('DJANGO_SECRET_KEY')
DEBUG = os.getenv('DEBUG', 'False') == 'True'

ALLOWED_HOSTS = os.getenv('ALLOWED_HOSTS', '').split(',')

INSTALLED_APPS = [
  'django.contrib.admin',
  'django.contrib.auth',
  'django.contrib.contenttypes',
  'django.contrib.sessions',
  'django.contrib.messages',
  'django.contrib.staticfiles',
  
  # Apps de terceros
  'rest_framework',
  
  # Tus apps
  'apps.usuarios',
  'apps.blog',
]
1urls.py
  • Configuración de rutas URL principales
  • Incluye rutas de aplicaciones
python
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
  path('admin/', admin.site.urls),
  path('usuarios/', include('apps.usuarios.urls')),
  path('blog/', include('apps.blog.urls')),
]

Instalación y Configuración del Servidor de Desarrollo

1Crear entorno virtual

Si tienes dudas sobre cómo crear un entorno virtual, te recomiendo visitar esta completa Guía sobre Entornos Virtuales en Python, donde encontrarás todo lo que necesitas saber, desde la creación hasta la gestión de entornos virtuales.

bash
# Usando venv (recomendado)
python3 -m venv venv
source venv/bin/activate  # En Linux/Mac
venvScriptsactivate     # En Windows
2Instalar Django
bash
pip install django
pip freeze > requirements.txt
3Crear nuevo proyecto
bash
django-admin startproject mi_proyecto
cd mi_proyecto
python manage.py startapp usuarios
4Configurar base de datos
bash
python manage.py makemigrations
python manage.py migrate
5Ejecutar servidor de desarrollo
bash
python manage.py runserver
# O para un puerto específico
python manage.py runserver 8080