Primeros pasos para arrancar un proyecto en Django: instalación, estructura de carpetas, registro de aplicaciones y los comandos de manage.py que vas a usar todo el tiempo. A diferencia de Flask, Django ya trae ORM, panel de administración y una estructura de proyecto definida — la opción natural cuando el proyecto va a crecer y no quieres armar esas piezas a mano.

Instalación

pip install Django

# verificar la versión instalada
python3 -m django --version

Crear un proyecto nuevo

django-admin startproject nombreProyecto

Esto genera la siguiente estructura:

nombreProyecto/
    manage.py
    nombreProyecto/
        settings.py
        urls.py
        wsgi.py
python3 manage.py runserver
  • settings.py contiene todos los ajustes del sitio: las aplicaciones instaladas, la ubicación de los archivos estáticos, la configuración de la base de datos, etc.
  • urls.py define los mapeos entre URLs y vistas. Aunque podría contener todo el mapeo de URLs del proyecto, es más común delegar parte de ese mapeo a cada aplicación.
  • wsgi.py ayuda a que la aplicación Django se comunique con el servidor web; normalmente lo usas tal cual, sin modificarlo.
  • El script manage.py se usa para crear aplicaciones, trabajar con la base de datos y levantar el servidor de desarrollo.

Crear una aplicación dentro del proyecto

python3 manage.py startapp catalog

Esto crea una nueva carpeta con los archivos típicos de una app de Django (los nombres ya indican su propósito: las vistas van en views.py, los modelos en models.py, las pruebas en tests.py, la configuración del admin en admin.py, el registro de la app en apps.py):

nombreProyecto/
    manage.py
    nombreProyecto/
    catalog/
        admin.py
        apps.py
        models.py
        tests.py
        views.py
        __init__.py
        migrations/
  • La carpeta migrations guarda las "migraciones" — archivos que te permiten actualizar la base de datos a medida que modificas tus modelos.
  • __init__.py es un archivo vacío que le indica a Python que esa carpeta es un paquete, para poder importar sus objetos desde otras partes del proyecto.

Registrar la aplicación en el proyecto

Para que Django incluya tu app cuando corras cualquier herramienta (por ejemplo, para crear sus tablas en la base de datos), tienes que registrarla en INSTALLED_APPS, dentro de settings.py:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'catalog.apps.CatalogConfig',
]

Esa última línea referencia la clase de configuración (CatalogConfig) que Django generó automáticamente en catalog/apps.py al crear la aplicación.

Otros ajustes importantes de settings.py:

  • TIME_ZONE — por ejemplo "America/Santiago".
  • SECRET_KEY — una clave usada como parte de la estrategia de seguridad del sitio. En producción nunca debe quedar hardcodeada en el código: léela desde una variable de entorno o un archivo fuera del repositorio.
  • DEBUG — muestra los logs de depuración detallados cuando ocurre un error, en vez de la respuesta HTTP genérica. Debe estar en False en producción, porque esa información de depuración es útil para un atacante.

El mapeador de URLs

El archivo urls.py del proyecto gestiona los mapeos de URL. Aunque se puede usar para todo, es más común delegar los mapeos a cada aplicación con include():

"""
El listado urlpatterns enruta URLs a vistas. Para más detalles:
https://docs.djangoproject.com/en/stable/topics/http/urls/

Ejemplos:
Vistas basadas en función:
  1. Agregar un import: from my_app import views
  2. Agregar una URL a urlpatterns: path('', views.home, name='home')
Vistas basadas en clases:
  1. Agregar un import: from other_app.views import Home
  2. Agregar una URL a urlpatterns: path('', Home.as_view(), name='home')
Incluir otro archivo de URLs:
  1. Importar include(): from django.urls import include, path
  2. Agregar una URL a urlpatterns: path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path

urlpatterns = [
    path('admin/', admin.site.urls),
]

urlpatterns es una lista de funciones path(). Cada una asocia un patrón de URL a una vista específica (que se ejecuta cuando el patrón coincide), o a otra lista de patrones mediante include() — en ese segundo caso, el patrón se convierte en el prefijo de los patrones definidos en el módulo incluido. Por ejemplo, agregar esta línea redirige todas las peticiones que empiecen con catalog/ al archivo catalog/urls.py de esa aplicación:

path('catalog/', include('catalog.urls')),

Comandos que más vas a usar

django-admin startproject nombreProyecto   # crear un proyecto nuevo
python3 manage.py startapp catalog          # crear una app nueva dentro del proyecto

python3 manage.py makemigrations
python3 manage.py migrate
python3 manage.py migrate --run-syncdb

python3 manage.py collectstatic

python3 manage.py test                      # corre las pruebas del proyecto
python3 manage.py createsuperuser           # crea un usuario administrador
python3 manage.py runserver                 # levanta el servidor de desarrollo