381

El libro de Django - afexpo.org · El libro de Django Autores: Adrian Holoatvy y Jacob Kaplan-Moss Editor técnico: Jeremy Dunck NOTA: Este trabajo de traducción aún no está completo

Embed Size (px)

Citation preview

  • El libro de DjangoAutores: Adrian Holovaty y Jacob Kaplan-Moss

    Editor tcnico: Jeremy Dunck

    NOTA: Este trabajo de traduccin an no est completo.Nmero de revisin: 757Fecha de compaginacin: 28 de julio de 2008

  • ndice general

    Preliminares xviiReconocimientos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xviiSobre los autores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xviiSobre el editor tcnico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xviiSobre los traductores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xviiiSobre el libro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xviii

    Introduccin xix

    1. Introduccin a Django 11.1. Qu es un Framework Web? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.2. El patrn de diseo MVC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21.3. La historia de Django . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31.4. Cmo leer este libro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

    1.4.1. Conocimientos de programacin requeridos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51.4.2. Conocimientos de Python requeridos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51.4.3. Nuevas caractersticas de Django . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51.4.4. Obteniendo ayuda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

    1.5. Qu sigue? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

    2. Empezando 72.1. Instalar Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72.2. Instalar Django . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

    2.2.1. Instalar un lanzamiento ocial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72.2.2. Instalar Django desde Subversion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

    2.3. Congurando la base de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82.3.1. Usar Django con PostgreSQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92.3.2. Usar Django con SQLite 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92.3.3. Usar Django con MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92.3.4. Usar Django sin una base de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

    2.4. Comenzando un proyecto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92.4.1. El servidor de desarrollo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

    2.5. Qu sigue? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

    3. Los principios de las pginas Web dinmicas 133.1. Tu primera Vista: Contenido dinmico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133.2. Mapeando URLs a Vistas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143.3. Cmo procesa una peticin Django . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

    3.3.1. Cmo procesa una peticin Django: Detalles completos . . . . . . . . . . . . . . . . . . . . . . 163.4. URLconfs y el acoplamiento dbil . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183.5. Errores 404 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183.6. Tu segunda Vista: URLs dinmicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

    3.6.1. Algunas palabras acerca de las URLs bonitas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203.6.2. Comodines en los patrones URL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

    3.7. Pginas de error bonitas con Django . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223.8. Qu sigue? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

    revisin 757 del 28 de julio de 2008

  • iv NDICE GENERAL

    4. El sistema de plantillas de Django 254.1. Sistema bsico de plantillas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254.2. Empleo del sistema de plantillas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

    4.2.1. Creacin de objetos Template . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264.2.2. Renderizar una plantilla . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284.2.3. Mltiples contextos, mismas plantillas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294.2.4. Bsqueda del contexto de una variable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294.2.5. Jugando con objetos Context . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

    4.3. Etiquetas de plantillas bsicas y ltros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324.3.1. Etiquetas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324.3.2. Filtros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

    4.4. Filosofa y Limitaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374.5. Uso de plantillas en las vistas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384.6. Cargadores de plantillas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

    4.6.1. render_to_response() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424.6.2. El truco locals() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424.6.3. Subdirectorios en get_template() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 434.6.4. La etiqueta de plantilla include . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

    4.7. Herencia de plantillas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 434.8. Qu sigue? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

    5. Interactuar con una base de datos: Modelos 475.1. La manera tonta de hacer una consulta a la base de datos en las vistas . . . . . . . . . . . . . . . . . 475.2. El patrn de diseo MTV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485.3. Conguracin de la base de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 495.4. Tu primera aplicacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 515.5. Denir modelos en Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 525.6. Tu primer modelo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 525.7. Instalando el modelo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 545.8. Acceso bsico a datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 565.9. Agregando strings de representacin del modelo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 565.10. Insertando y actualizando datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 575.11. Seleccionar objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58

    5.11.1. Filtrar datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 595.11.2. Obteniendo objetos individuales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 605.11.3. Ordenando datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 605.11.4. Encadenando bsquedas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 615.11.5. Rebanando datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61

    5.12. Eliminando objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 625.13. Realizando cambios en el esquema de una base de datos . . . . . . . . . . . . . . . . . . . . . . . . . . 62

    5.13.1. Agregando campos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 625.13.2. Eliminando campos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 645.13.3. Eliminando campos Many-to-Many . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 645.13.4. Eliminando modelos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64

    5.14. Qu sigue? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

    6. El sitio de Administracin Django 676.1. Activando la interfaz de administracin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 676.2. Usando la interfaz de administracin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68

    6.2.1. Usuarios, Grupos y Permisos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 736.3. Personalizando la interfaz de administracin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 736.4. Personalizando la apariencia de la interfaz de administracin . . . . . . . . . . . . . . . . . . . . . . . 776.5. Personalizando la pgina ndice del administrador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 796.6. Cundo y porqu usar la interfaz de administracin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 796.7. Qu sigue? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79

    revisin 757 del 28 de julio de 2008

  • NDICE GENERAL v

    7. Procesamiento de formularios 817.1. Bsquedas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 817.2. El formulario perfecto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 837.3. Creacin de un formulario para comentarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 837.4. Procesamiento de los datos suministrados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 867.5. Nuestras propias reglas de validacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 877.6. Una presentacin personalizada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 887.7. Creando formularios a partir de Modelos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 897.8. Qu sigue? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90

    8. Vistas avanzadas y URLconfs 918.1. Trucos de URLconf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91

    8.1.1. Importacin de funciones de forma efectiva . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 918.1.2. Usar mltiples prejos de vista . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 928.1.3. Casos especiales de URLs en modo Debug . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 938.1.4. Usar grupos con nombre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 938.1.5. Comprender el algoritmo de combinacin/agrupacin . . . . . . . . . . . . . . . . . . . . . . . . 958.1.6. Pasarle opciones extra a las funciones vista . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 958.1.7. Usando argumentos de vista por omisin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 998.1.8. Manejando vistas en forma especial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1008.1.9. Capturando texto en URLs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1008.1.10. Entendiendo dnde busca una URLconf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101

    8.2. Incluyendo otras URLconfs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1018.2.1. Cmo trabajan los parmetros capturados con include() . . . . . . . . . . . . . . . . . . . . . . 1028.2.2. Cmo funcionan las opciones extra de URLconf con include() . . . . . . . . . . . . . . . . . . . 102

    8.3. Qu sigue? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103

    9. Vistas genricas 1059.1. Usar vistas genricas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1059.2. Vistas genricas de objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1069.3. Extender las vistas genricas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107

    9.3.1. Crear contextos de plantilla amistosos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1089.3.2. Agregar un contexto extra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1089.3.3. Mostrar subconjuntos de objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1099.3.4. Filtrado complejo con funciones wrapper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1099.3.5. Realizar trabajo extra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110

    9.4. Qu sigue? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111

    10.Extendiendo el sistema de plantillas 11310.1. Revisin del lenguaje de plantillas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11310.2. Procesadores de contexto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113

    10.2.1. django.core.context_processors.auth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11710.2.2. django.core.context_processors.debug . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11710.2.3. django.core.context_processors.i18n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11710.2.4. django.core.context_processors.request . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11710.2.5. Consideraciones para escribir tus propios procesadores de contexto . . . . . . . . . . . . . . . . 117

    10.3. Detalles internos de la carga de plantillas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11810.4. Extendiendo el sistema de plantillas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119

    10.4.1. Creando una biblioteca para plantillas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11910.4.2. Escribiendo ltros de plantilla personalizados . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12010.4.3. Escribiendo etiquetas de plantilla personalizadas . . . . . . . . . . . . . . . . . . . . . . . . . . 12110.4.4. Un atajo para etiquetas simples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12510.4.5. Etiquetas de inclusin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125

    10.5. Escribiendo cargadores de plantillas personalizados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12610.6. Usando la referencia de plantillas incorporadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12710.7. Congurando el sistema de plantillas en modo autnomo . . . . . . . . . . . . . . . . . . . . . . . . . . 12810.8. Qu sigue? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128

    revisin 757 del 28 de julio de 2008

  • vi NDICE GENERAL

    11.Generacin de contenido no HTML 12911.1. Lo bsico: Vistas y tipos MIME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12911.2. Produccin de CSV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13011.3. Generando PDFs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131

    11.3.1. Instalando ReportLab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13111.3.2. Escribiendo tu Vista . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13111.3.3. PDFs complejos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132

    11.4. Otras posibilidades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13311.5. El Framework de Feeds de Sindicacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133

    11.5.1. Inicializacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13311.5.2. Un Feed simple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13411.5.3. Un Feed ms complejo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13511.5.4. Especicando el tipo de Feed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13611.5.5. Enclosures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13711.5.6. Idioma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13711.5.7. URLs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13711.5.8. Publicando feeds Atom y RSS conjuntamente . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137

    11.6. El framework Sitemap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13811.6.1. Instalacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13811.6.2. Inicializacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13911.6.3. Clases Sitemap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13911.6.4. Accesos directos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14011.6.5. Creando un ndice Sitemap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14111.6.6. Haciendo ping a Google . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141

    11.7. Qu sigue? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142

    12.Sesiones, usuario e inscripciones 14312.1. Cookies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143

    12.1.1. Cmo denir y leer los valores de las cookies . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14412.1.2. Las cookies tienen doble lo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145

    12.2. El entorno de sesiones de Django . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14512.2.1. Activar sesiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14612.2.2. Usar las sesiones en una vista . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14612.2.3. Comprobar que las cookies sean utilizables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14712.2.4. Usar las sesiones fuera de las vistas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14812.2.5. Cundo se salvan las sesiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14812.2.6. Sesiones breves frente a sesiones persistentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14912.2.7. Otras caractersticas de las sesiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149

    12.3. Usuarios e identicacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15012.3.1. Habilitando el soporte para autenticacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151

    12.4. Utilizando usuarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15112.4.1. Iniciar y cerrar sesin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15312.4.2. Limitar el acceso a los usuarios identicados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15412.4.3. Limitar el acceso a usuarios que pasan una prueba . . . . . . . . . . . . . . . . . . . . . . . . . 15512.4.4. Gestionar usuarios, permisos y grupos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15612.4.5. Usar informacin de autenticacin en plantillas . . . . . . . . . . . . . . . . . . . . . . . . . . 158

    12.5. El resto de detalles: permisos, grupos, mensajes y perles . . . . . . . . . . . . . . . . . . . . . . . . . 15912.5.1. Permisos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15912.5.2. Grupos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16012.5.3. Mensajes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16012.5.4. Perles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161

    12.6. Qu sigue? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161

    revisin 757 del 28 de julio de 2008

  • NDICE GENERAL vii

    13.Cache 16313.1. Activando el Cache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163

    13.1.1. Memcached . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16413.1.2. Cache en Base de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16413.1.3. Cache en Sistema de Archivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16513.1.4. Cache en Memoria local . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16513.1.5. Cache Simple (para desarrollo) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16513.1.6. Cache Dummy (o estpida) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16513.1.7. Argumentos de CACHE_BACKEND . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165

    13.2. La cache por sitio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16613.3. Cache por vista . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167

    13.3.1. Especicando la cache por vista en URLconf . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16713.4. La API de cache de bajo nivel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16813.5. Caches upstream . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169

    13.5.1. Usando el encabezado Vary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16913.5.2. Otros Encabezados de cache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170

    13.6. Otras optimizaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17113.7. Orden de MIDDLEWARE_CLASSES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17113.8. Qu sigue? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172

    14.Otros sub-frameworks contribuidos 17314.1. La biblioteca estndar de Django . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17314.2. Sites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174

    14.2.1. Escenario 1: reuso de los datos en mltiples sitios . . . . . . . . . . . . . . . . . . . . . . . . . . 17414.2.2. Escenario 2: alojamiento del nombre/dominio de tu sitio en un solo lugar . . . . . . . . . . . . 17414.2.3. Modo de uso del framework sites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17414.2.4. Las capacidades del framework Sites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17514.2.5. CurrentSiteManager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17714.2.6. El uso que hace Django del framework Sites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178

    14.3. Flatpages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17814.3.1. Usando atpages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17914.3.2. Agregando, modicando y eliminando atpages . . . . . . . . . . . . . . . . . . . . . . . . . . . 18014.3.3. Usando plantillas de atpages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180

    14.4. Redirects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18114.4.1. Usando el framework redirects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18114.4.2. Agregando, modicando y eliminando redirecciones . . . . . . . . . . . . . . . . . . . . . . . . . 181

    14.5. Proteccin contra CSRF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18214.5.1. Un ejemplo simple de CSRF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18214.5.2. Un ejemplo ms complejo de CSRF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18214.5.3. Previniendo la CSRF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183

    14.6. Haciendo los datos ms humanos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18414.6.1. apnumber . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18414.6.2. intcomma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18414.6.3. intword . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18414.6.4. ordinal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184

    14.7. Filtros de marcado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18514.8. Qu sigue? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185

    15.Middleware 18715.1. Qu es middleware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18715.2. Instalacin de Middleware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18815.3. Mtodos de un Middleware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188

    15.3.1. Inicializar: __init__(self) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18815.3.2. Pre-procesador de peticin: process_request(self, request) . . . . . . . . . . . . . . . . . . . . . 18815.3.3. Pre-procesador de vista: process_view(self, request, view, args, kwargs) . . . . . . . . . . . . . 18915.3.4. Pos-procesador de respuesta: process_response(self, request, response) . . . . . . . . . . . . . . 18915.3.5. Pos-procesador de excepcin: process_exception(self, request, exception) . . . . . . . . . . . . . 189

    15.4. Middleware incluido . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19015.4.1. Middleware de soporte para autenticacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190

    revisin 757 del 28 de julio de 2008

  • viii NDICE GENERAL

    15.4.2. Middleware Common . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19015.4.3. Middleware de compresin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19015.4.4. Middleware de GET condicional . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19115.4.5. Soporte para uso de proxy inverso (Middleware X-Forwarded-For) . . . . . . . . . . . . . . . . 19115.4.6. Middleware de soporte para sesiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19115.4.7. Middleware de cache de todo el sitio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19115.4.8. Middleware de transaccin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19115.4.9. Middleware X-View . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191

    15.5. Qu sigue? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191

    16.Integracin con Base de datos y Aplicaciones existentes 19316.1. Integracin con una base de datos existente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193

    16.1.1. Empleo de inspectdb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19316.1.2. Limpiar los modelos generados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194

    16.2. Integracin con un sistema de autenticacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19416.2.1. Especicar los back-ends de autenticacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19516.2.2. Escribir un back-end de autenticacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195

    16.3. Integracin con aplicaciones web existentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19616.4. Qu sigue? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196

    17.Extendiendo la Interfaz de Administracin de Django 19917.1. El Zen de la aplicacin Admin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200

    17.1.1. Usuarios conables ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20017.1.2. ... editando ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20017.1.3. ... contenido estructurado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20017.1.4. Parada Completa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200

    17.2. Pesonalizando las plantillas de la interfaz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20117.2.1. Plantillas de modelos propios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20117.2.2. JavaScript Personalizado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203

    17.3. Creando vistas de administracin personalizadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20317.4. Sobreescribiendo vistas incorporadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20517.5. Qu sigue? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205

    18.Internacionalizacin 20718.1. Especicando cadenas de traduccin en cdigo Python . . . . . . . . . . . . . . . . . . . . . . . . . . . 208

    18.1.1. Funciones estndar de traduccin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20818.1.2. Marcando cadenas como no-op . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20918.1.3. Traduccin perezosa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20918.1.4. Pluralizacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209

    18.2. Especicando cadenas de traduccin en cdigo de plantillas . . . . . . . . . . . . . . . . . . . . . . . . 21018.3. Creando archivos de idioma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211

    18.3.1. Creando los archivos de mensajes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21118.3.2. Compilando archivos de mensajes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212

    18.4. Cmo descubre Django la preferencia de idioma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21218.5. La vista de redireccin set_language . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21418.6. Usando traducciones en tus propios proyectos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21418.7. Traducciones y JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215

    18.7.1. La vista javascript_catalog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21518.7.2. Usando el catlogo de traducciones JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . 21618.7.3. Creando catlogos de traducciones JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216

    18.8. Notas para usuarios familiarizados con gettext . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21718.9. Qu sigue? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217

    revisin 757 del 28 de julio de 2008

  • NDICE GENERAL ix

    19.Seguridad 21919.1. El tema de la seguridad en la Web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21919.2. Inyeccin de SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219

    19.2.1. La solucin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22019.3. Cross-Site Scripting (XSS) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221

    19.3.1. La solucin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22119.4. Cross-Site Request Forgery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22219.5. Session Forging/Hijacking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222

    19.5.1. La solucin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22319.6. Inyeccin de cabeceras de email . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223

    19.6.1. La solucin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22419.7. Directory Traversal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224

    19.7.1. La solucin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22419.8. Exposicin de mensajes de error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225

    19.8.1. La solucin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22519.9. Palabras nales sobre la seguridad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22519.10.Qu sigue? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226

    20.Implementando Django 22720.1. Nada Compartido . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22720.2. Un nota sobre preferencias personales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22820.3. Usando Django con Apache y mod_python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229

    20.3.1. Conguracin bsica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22920.3.2. Corriendo multiples instalaciones de Django en la misma instancia Apache . . . . . . . . . . . 23020.3.3. Corriendo un servidor de desarrollo con mod_python . . . . . . . . . . . . . . . . . . . . . . . 23120.3.4. Sirviendo Django y archivos multimedia desde la misma instancia Apache . . . . . . . . . . . . 23120.3.5. Manejo de errores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23220.3.6. Manejando fallas de segmentacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232

    20.4. Usando Django con FastCGI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23220.4.1. Descripcin de FastCGI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23220.4.2. Ejecutando tu Servidor FastCGI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23320.4.3. Usando Django con Apache y FastCGI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23420.4.4. FastCGI y lighttpd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23520.4.5. Ejecutando Django en un Proveedor de Hosting Compartido con Apache . . . . . . . . . . . . . 236

    20.5. Escalamiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23620.5.1. Ejecutando en un Servidor nico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23720.5.2. Separando el Servidor de Bases de Datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23720.5.3. Ejecutando un Servidor de Medios Separado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23720.5.4. Implementando Balance de Carga y Redundancia . . . . . . . . . . . . . . . . . . . . . . . . . . 23920.5.5. Yendo a lo grande . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239

    20.6. Ajuste de Performance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24220.6.1. No hay tal cosa como demasiada RAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24220.6.2. Deshabilita Keep-Alive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24220.6.3. Usa memcached . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24220.6.4. Usa memcached siempre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24220.6.5. nete a la Conversacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243

    20.7. Qu sigue? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243

    A. Casos de estudio 245A.1. Elenco . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245A.2. Por qu Django? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246A.3. Comenzando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247A.4. Portando cdigo existente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247A.5. Cmo les fue? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247A.6. Estructura de Equipo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249A.7. Implementacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249

    revisin 757 del 28 de julio de 2008

  • x NDICE GENERAL

    B. Referencia de la denicin de modelos 251B.1. Campos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251

    B.1.1. AutoField . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252B.1.2. BooleanField . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252B.1.3. CharField . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252B.1.4. CommaSeparatedIntegerField . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252B.1.5. DateField . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252B.1.6. DateTimeField . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252B.1.7. EmailField . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252B.1.8. FileField . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252B.1.9. FilePathField . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253B.1.10. FloatField . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254B.1.11. ImageField . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254B.1.12. IntegerField . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254B.1.13. IPAddressField . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254B.1.14.NullBooleanField . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254B.1.15. PhoneNumberField . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254B.1.16. PositiveIntegerField . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254B.1.17. PositiveSmallIntegerField . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254B.1.18. SlugField . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255B.1.19. SmallIntegerField . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255B.1.20.TextField . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255B.1.21.TimeField . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255B.1.22.URLField . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255B.1.23.USStateField . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255B.1.24.XMLField . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255

    B.2. Opciones Universales de Campo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255B.2.1. null . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256B.2.2. blank . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256B.2.3. choices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256B.2.4. db_column . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257B.2.5. db_index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257B.2.6. default . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257B.2.7. editable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257B.2.8. help_text . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257B.2.9. primary_key . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257B.2.10. radio_admin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257B.2.11. unique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257B.2.12. unique_for_date . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257B.2.13. unique_for_month . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258B.2.14. unique_for_year . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258B.2.15. verbose_name . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258

    B.3. Relaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258B.3.1. Relaciones Muchos-a-Uno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258B.3.2. Relaciones Muchos-a-Muchos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260

    B.4. Opciones de los Metadatos del Modelo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261B.4.1. db_table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261B.4.2. get_latest_by . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262B.4.3. order_with_respect_to . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262B.4.4. ordering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262B.4.5. permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262B.4.6. unique_together . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263B.4.7. verbose_name . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263B.4.8. verbose_name_plural . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263

    B.5. Managers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263B.5.1. Nombres de Manager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264B.5.2. Managers Personalizados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264

    B.6. Mtodos de Modelo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266

    revisin 757 del 28 de julio de 2008

  • NDICE GENERAL xi

    B.6.1. __str__ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266B.6.2. get_absolute_url . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267B.6.3. Ejecutando SQL personalizado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268B.6.4. Sobreescribiendo los Mtodos por omisin del Modelo . . . . . . . . . . . . . . . . . . . . . . . 268

    B.7. Opciones del Administrador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268B.7.1. date_hierarchy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269B.7.2. elds . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269B.7.3. js . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270B.7.4. list_display . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270B.7.5. list_display_links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271B.7.6. list_lter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272B.7.7. list_per_page . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272B.7.8. list_select_related . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272B.7.9. ordering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272B.7.10. save_as . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272B.7.11. save_on_top . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272B.7.12. search_elds . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272

    C. Referencia de la API de base de datos 275C.1. Creando Objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275

    C.1.1. Qu pasa cuando grabas? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276C.1.2. Claves primarias autoincrementales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276

    C.2. Grabando cambios de objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277C.3. Recuperando objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277C.4. Caching y QuerySets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278C.5. Filtrando objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278

    C.5.1. Encadenando ltros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279C.5.2. Limitando QuerySets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280C.5.3. Mtodos de consulta que retornan nuevos QuerySets . . . . . . . . . . . . . . . . . . . . . . . . 280C.5.4. Metodos de QuerySet que no devuelven un QuerySet . . . . . . . . . . . . . . . . . . . . . . . 283

    C.6. Patrones de bsqueda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285C.6.1. exact . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286C.6.2. iexact . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286C.6.3. contains . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286C.6.4. icontains . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286C.6.5. gt, gte, lt, and lte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287C.6.6. in . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287C.6.7. startswith . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287C.6.8. istartswith . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287C.6.9. endswith and iendswith . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287C.6.10. range . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287C.6.11. year, month, and day . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287C.6.12. isnull . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288C.6.13. search . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288C.6.14.El patrn de bsqueda pk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288

    C.7. Bsquedas complejas con Objetos Q . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289C.8. Objetos Relacionados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289

    C.8.1. Consultas Que Cruzan Relaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290C.8.2. Relaciones de Clave Fornea . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290C.8.3. Relaciones de Clave Forenea Inversas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290C.8.4. Relaciones muchos-a-muchos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292C.8.5. Consultas que Abarcan Objetos Relacionados . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292

    C.9. Borrando Objectos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292C.10.Mtodos de Instancia Adicionales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293

    C.10.1. get_FOO_display() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293C.10.2. get_next_by_FOO(**kwargs) y get_previous_by_FOO(**kwargs) . . . . . . . . . . . . . . . 293C.10.3. get_FOO_lename() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294C.10.4. get_FOO_url() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294

    revisin 757 del 28 de julio de 2008

  • xii NDICE GENERAL

    C.10.5. get_FOO_size() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294C.10.6. save_FOO_le(lename, raw_contents) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294C.10.7. get_FOO_height() and get_FOO_width() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294

    C.11.Atajos (Shortcuts) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294C.11.1. get_object_or_404() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294C.11.2. get_list_or_404() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295

    C.12.Utilizando SQL Crudo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295

    D. Referencia de las vistas genricas 297D.1. Argumentos comunes a todas las vistas genricas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297D.2. Vistas genricas simples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298

    D.2.1. Representar una plantilla . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298D.2.2. Redirigir a otra URL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298

    D.3. Vistas de listado/detalle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299D.3.1. Listas de objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299D.3.2. Vista de detalle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300

    D.4. Vistas genricas basadas en fechas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302D.4.1. ndice de archivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302D.4.2. Archivos anuales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303D.4.3. Archivos mensuales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304D.4.4. Archivos semanales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306D.4.5. Archivos diarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307D.4.6. Archivo para hoy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308D.4.7. Pginas de detalle basadas en fecha . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308

    D.5. Vistas genericas para Crear/Modicar/Borrar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309D.5.1. Vista de creacin de objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310D.5.2. Vista de modicacin de objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311D.5.3. Vista de borrado de objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312

    E. Variables de conguracin 313E.1. Qu es un archivo de conguracin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313

    E.1.1. Valores por omisin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313E.1.2. Viendo cules variables de conguracin has cambiado . . . . . . . . . . . . . . . . . . . . . . . 313E.1.3. Usando variables de conguracin en cdigo Python . . . . . . . . . . . . . . . . . . . . . . . . 314E.1.4. Modicando variables de conguracin en tiempo de ejecucin . . . . . . . . . . . . . . . . . . 314E.1.5. Seguridad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314E.1.6. Creando tus propias variables de conguracin . . . . . . . . . . . . . . . . . . . . . . . . . . . 314

    E.2. Indicando la conguracin: DJANGO_SETTINGS_MODULE . . . . . . . . . . . . . . . . . . . . . . 314E.2.1. La utilidad django-admin.py . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315E.2.2. En el servidor (mod_python) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315

    E.3. Usando variables de conguracin sin jar DJANGO_SETTINGS_MODULE . . . . . . . . . . . . . 315E.3.1. Variables de conguracin por omisin personalizados . . . . . . . . . . . . . . . . . . . . . . . 316E.3.2. Es necesario que uses congure() o DJANGO_SETTINGS_MODULE . . . . . . . . . . . . . . 316

    E.4. Variables de conguracin disponibles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316E.4.1. ABSOLUTE_URL_OVERRIDES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316E.4.2. ADMIN_FOR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316E.4.3. ADMIN_MEDIA_PREFIX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317E.4.4. ADMINS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317E.4.5. ALLOWED_INCLUDE_ROOTS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317E.4.6. APPEND_SLASH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317E.4.7. CACHE_BACKEND . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317E.4.8. CACHE_MIDDLEWARE_KEY_PREFIX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317E.4.9. DATABASE_ENGINE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317E.4.10. DATABASE_HOST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317E.4.11. DATABASE_NAME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318E.4.12. DATABASE_OPTIONS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318E.4.13. DATABASE_PASSWORD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318E.4.14. DATABASE_PORT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318E.4.15. DATABASE_USER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318

    revisin 757 del 28 de julio de 2008

  • NDICE GENERAL xiii

    E.4.16. DATE_FORMAT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318E.4.17. DATETIME_FORMAT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318E.4.18. DEBUG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318E.4.19. DEFAULT_CHARSET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319E.4.20. DEFAULT_CONTENT_TYPE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319E.4.21. DEFAULT_FROM_EMAIL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319E.4.22. DISALLOWED_USER_AGENTS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319E.4.23. EMAIL_HOST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319E.4.24. EMAIL_HOST_PASSWORD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319E.4.25. EMAIL_HOST_USER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319E.4.26. EMAIL_PORT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319E.4.27. EMAIL_SUBJECT_PREFIX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319E.4.28. FIXTURE_DIRS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320E.4.29. IGNORABLE_404_ENDS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320E.4.30. IGNORABLE_404_STARTS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320E.4.31. INSTALLED_APPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320E.4.32. INTERNAL_IPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320E.4.33. JING_PATH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320E.4.34. LANGUAGE_CODE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320E.4.35. LANGUAGES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320E.4.36.MANAGERS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321E.4.37.MEDIA_ROOT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321E.4.38.MEDIA_URL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321E.4.39.MIDDLEWARE_CLASSES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321E.4.40.MONTH_DAY_FORMAT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321E.4.41. PREPEND_WWW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321E.4.42. PROFANITIES_LIST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322E.4.43. ROOT_URLCONF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322E.4.44. SECRET_KEY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322E.4.45. SEND_BROKEN_LINK_EMAILS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322E.4.46. SERIALIZATION_MODULES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322E.4.47. SERVER_EMAIL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322E.4.48. SESSION_COOKIE_AGE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322E.4.49. SESSION_COOKIE_DOMAIN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322E.4.50. SESSION_COOKIE_NAME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322E.4.51. SESSION_COOKIE_SECURE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323E.4.52. SESSION_EXPIRE_AT_BROWSER_CLOSE . . . . . . . . . . . . . . . . . . . . . . . . . . 323E.4.53. SESSION_SAVE_EVERY_REQUEST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323E.4.54. SITE_ID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323E.4.55. TEMPLATE_CONTEXT_PROCESSORS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323E.4.56. TEMPLATE_DEBUG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323E.4.57. TEMPLATE_DIRS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323E.4.58. TEMPLATE_LOADERS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323E.4.59. TEMPLATE_STRING_IF_INVALID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324E.4.60. TEST_RUNNER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324E.4.61. TEST_DATABASE_NAME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324E.4.62. TIME_FORMAT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324E.4.63. TIME_ZONE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324E.4.64. URL_VALIDATOR_USER_AGENT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324E.4.65. USE_ETAGS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324E.4.66. USE_I18N . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325E.4.67. YEAR_MONTH_FORMAT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325

    revisin 757 del 28 de julio de 2008

  • xiv NDICE GENERAL

    F. Etiquetas de plantilla y ltros predenidos 327F.1. Etiquetas predenidas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327

    F.1.1. block . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327F.1.2. comment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327F.1.3. cycle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327F.1.4. debug . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328F.1.5. extends . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328F.1.6. lter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328F.1.7. rstof . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328F.1.8. for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328F.1.9. if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329F.1.10. ifchanged . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330F.1.11. ifequal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330F.1.12. ifnotequal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330F.1.13. include . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331F.1.14. load . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331F.1.15. now . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331F.1.16. regroup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333F.1.17. spaceless . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333F.1.18. ssi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334F.1.19. templatetag . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334F.1.20. url . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334F.1.21. widthratio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335

    F.2. Filtros predenidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335F.2.1. add . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335F.2.2. addslashes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335F.2.3. caprst . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335F.2.4. center . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335F.2.5. cut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335F.2.6. date . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336F.2.7. default . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336F.2.8. default_if_none . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336F.2.9. dictsort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336F.2.10. dictsortreversed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336F.2.11. divisibleby . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336F.2.12. escape . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336F.2.13. lesizeformat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337F.2.14. rst . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337F.2.15. x_ampersands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337F.2.16. oatformat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337F.2.17. get_digit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337F.2.18. join . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338F.2.19. length . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338F.2.20. length_is . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338F.2.21. linebreaks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338F.2.22. linebreaksbr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338F.2.23. linenumbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338F.2.24. ljust . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338F.2.25. lower . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338F.2.26. make_list . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339F.2.27. phone2numeric . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339F.2.28. pluralize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339F.2.29. pprint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339F.2.30. random . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339F.2.31. removetags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340F.2.32. rjust . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340F.2.33. slice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340F.2.34. slugify . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340

    revisin 757 del 28 de julio de 2008

  • NDICE GENERAL xv

    F.2.35. stringformat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340F.2.36. striptags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340F.2.37. time . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340F.2.38. timesince . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341F.2.39. timeuntil . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341F.2.40. title . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341F.2.41. truncatewords . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341F.2.42. truncatewords_html . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341F.2.43. unordered_list . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341F.2.44. upper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342F.2.45. urlencode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342F.2.46. urlize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342F.2.47. urlizetrunc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342F.2.48. wordcount . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342F.2.49. wordwrap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342F.2.50. yesno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343

    G. El utilitario django-admin 345G.1. Uso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345G.2. Acciones Disponibles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345

    G.2.1. adminindex [appname appname ...] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346G.2.2. createcachetable [tablename] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346G.2.3. dbshell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346G.2.4. disettings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346G.2.5. dumpdata [appname appname ...] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346G.2.6. ush . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346G.2.7. inspectdb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346G.2.8. loaddata [xture xture ...] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347G.2.9. reset [appname appname ...] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348G.2.10.runfcgi [options] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348G.2.11.runserver [nmero de puerto opcional, or direccinIP:puerto] . . . . . . . . . . . . . . . . . . . 348G.2.12.shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348G.2.13.sql [appname appname ...] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349G.2.14.sqlall [appname appname ...] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349G.2.15.sqlclear [appname appname ...] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349G.2.16.sqlcustom [appname appname ...] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349G.2.17.sqlindexes [appname appname ...] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349G.2.18.sqlreset [appname appname ...] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349G.2.19.sqlsequencereset [appname appname ...] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349G.2.20.startapp [appname] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349G.2.21.startproject [projectname] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349G.2.22.syncdb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349G.2.23.test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350G.2.24.validate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350

    G.3. Opciones Disponibles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350G.3.1. --settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350G.3.2. --pythonpath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350G.3.3. --format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350G.3.4. --help . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350G.3.5. --indent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350G.3.6. --noinput . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351G.3.7. --noreload . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351G.3.8. --version . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351G.3.9. --verbosity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351G.3.10.--adminmedia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351

    revisin 757 del 28 de julio de 2008

  • xvi NDICE GENERAL

    H. Objetos Peticin y Respuesta 353H.1. HttpRequest . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353

    H.1.1. Objetos QueryDict . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355H.1.2. Un ejemplo completo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356

    H.2. HttpResponse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357H.2.1. Construccin de HttpResponses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357H.2.2. Establecer las cabeceras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357H.2.3. Subclases de HttpResponse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358H.2.4. Retornar Errores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358H.2.5. Personalizar la Vista 404 (Not Found) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359H.2.6. Personalizar la Vista 500 (Server Error) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359

    I. Docutils System Messages 361

    revisin 757 del 28 de julio de 2008

  • Preliminares

    Reconocimientos

    El aspecto ms graticante de trabajar con Django es la comunidad. Hemos sido especialmente afortunados de queDjango haya atrado a tanta gente inteligente, motivada y amistosa. Un segmento de esa comunidad nos sigui duranteel lanzamiento online beta de este libro. Sus revisiones y comentarios fueron indispensables; este libro no hubiesesido posible sin esa maravillosa revisin de pares. Casi mil personas dejaron comentarios que ayudaron a mejorar laclaridad, calidad y el ujo del libro nal. Queremos agradecer a todos y cada uno de ellos.

    Estamos especialmente agradecidos con aquellos que dispusieron de su tiempo para revisar el libro en profundidady dejarnos decenas (a veces cientos) de comentarios: Marty Alchin, Max Battcher, Oliver Beattie, Rod Begbie, PaulBissex, Matt Boersma, Robbin Bonthond, Peter Bowyer, Nesta Campbell, Jon Colverson, Je Croft, Chris Dary, AlexDong, Matt Drew, Robert Dzikowski, Nick Eord, Ludvig Ericson, Eric Floehr, Brad Fults, David Grant, Simon Green-hill, Robert Haveman, Kent Johnson, Andrew Kember, Marek Kubica, Eduard Kucera, Anand Kumria, Scott Lamb,Fredrik Lundh, Vadim Macagon, Markus Majer, Orestis Markou, R. Mason, Yasushi Masuda, Kevin Menard, CarloMiron, James Mulholland, R.D. Nielsen, Michael O'Keefe, Lawrence Oluyede, Andreas Pfrengle, Frankie Robertson,Mike Robinson, Armin Ronacher, Daniel Roseman, Johan Samyn, Ross Shannon, Carolina F. Silva, Paul Smith, BjrnStabell, Bob Stepno, Graeme Stevenson, Justin Stockton, Kevin Teague, Daniel Tietze, Brooks Travis, Peter Tripp,Matthias Urlichs, Peter van Kampen, Alexandre Vassalotti, Jay Wang, Brian Will y Joshua Works.

    Muchas gracias a nuestro editor tcnico, Jeremy Dunck. Sin Jeremy, este libro habra quedado en desorden, conerrores, inexactitudes y cdigo roto. Nos sentimos realmente afortunados de que alguien con el talento de Jeremyencontrase el tiempo de ayudarnos.

    Un especial agradecimiento a Simon Willison por escribir el captulo de procesamiento de formularios. Realmenteapreciamos la ayuda y nos enorgullece que la excelente redaccin de Simon pueda ser parte de este libro.

    Estamos agradecidos por todo el duro trabajo que la gente de Apress hizo en este libro. Su ayuda y paciencia hasido asombrosa; este libro no habra quedado terminado sin todo ese trabajo de su parte. Nos pone especialmentefelices que Apress haya apoyado e incluso alentado el lanzamiento libre de este libro on line; es maravilloso ver a uneditor tan abrazado al espritu del open source.

    Finalmente, por supuesto, gracias a nuestros amigos, familias y compaeros que gentilmente toleraron nuestraausencia mental mientras terminbamos este trabajo.

    Sobre los autores

    Adrian Holovaty, desarrollador Web y periodista, es uno de los creadores y desarrolladores del ncleo de Django.Es el fundador de EveryBlock, una Web startup local de noticias. Cuando no est trabajando en mejoras para Django,Adrian hackea en proyectos de benecio pblico, como chicagocrime.org, uno de los mashups originales de GoogleMaps. Vive en Chicago y mantiene un weblog en holovaty.com.

    Jacob Kaplan-Moss es uno de los principales desarrolladores de Django. En su empleo diurno, es el desarrolladorprincipal para el Lawrence Journal-World, un peridico de dueos locales en Lawrence, Kansas, donde Django fuedesarrollado. En el Journal-World, supervisa el desarrollo de Ellington, una plataforma de publicacin online denoticias para compaas de medios de comunicacin. A Jacob se lo puede encontrar online en jacobian.org.

    Sobre el editor tcnico

    Jeremy Dunck es el principal desarrollador de Pegasus News, un sitio local personalizado con base en Dallas,Texas. Es uno de los primeros colaboradores de Greasemonkey y Django y ve la tecnologa como una herramienta parala comunicacin y el acceso al conocimiento.

    revisin 757 del 28 de julio de 2008

    http://holovaty.com/http://jacobian.org/

  • xviii NDICE GENERAL

    Sobre los traductores

    La traduccin al espaol de El libro de Django fue posible gracias a la colaboracin voluntaria de la comunidad Djan-go en Espaol y Python Argentina. El proyecto se lleva a cabo desde http://humitos.homelinux.net/django-book.A la fecha, han contribuido de una u otra manera a este trabajo:

    Manuel Kaufmann

    Martn Gaitn

    Leonardo Gastn De Luca

    Guillermo Heizenreder

    Alejandro Autaln

    Renzo Carbonara

    Milton Mazzarri

    Ramiro Morales

    Juan Ignacio Rodrguez de Len

    Percy Prez Pinedo

    Toms Casquero

    Marcos Agustn Lewis

    Lenidas Hernn Olivera

    Federico M. Peretti

    Csar Ballardini

    Anthony Lenton

    Csar Roldn

    Gonzalo Delgado

    Sobre el libro

    Ests leyendo El libro de Django, publicado en Diciembre de 2007 por Apress con el ttulo The Denitive Guideto Django: Web Development Done Right.

    Hemos lanzado este libro libremente por un par de razones. La primera es que amamos Django y queremos que seatan accesible como sea posible. Muchos programadores aprenden su arte desde material tcnico bien escrito, as quenosotros intentamos escribir una gua destacada que sirva adems como referencia para Django.

    La segunda, es que resulta que escribir libros sobre tecnologa es particularmente difcil: sus palabras se vuelvenanticuadas incluso antes de que el libro llegue a la imprenta. En la web, sin embargo, la tinta nunca se seca --podremos mantener este libro al da (y as lo haremos) --.

    La respuesta de los lectores es una parte crtica de ese proceso. Hemos construido un sistema de comentarios quete dejar comentar sobre cualquier parte del libro; leeremos y utilizaremos estos comentarios en nuevas versiones.

    revisin 757 del 28 de julio de 2008

    http://www.django.eshttp://www.django.eshttp://www.python.org/arhttp://humitos.homelinux.net/django-bookhttp://nqnwebs.comhttp://www.milmazz.comhttp://tomascasquero.comhttp://perettifederico.com.arhttp://ballardini.com.ar/http://www.ihuro.com.arhttp://www.apress.com/http://www.apress.com/book/view/1590597257/http://www.apress.com/book/view/1590597257/http://www.djangobook.com/about/comments/

  • Introduccin

    Al comienzo, los desarrolladores web escriban cada una de las pginas a mano. Actualizar un sitio web signicabaeditar HTML; un rediseo implicaba rehacer cada una de las pginas, una por vez.

    Como los sitios web crecieron y se hicieron ms ambiciosos, rpidamente se hizo obvio que esta situacin era tediosa,consuma tiempo y al nal era insostenible. Un grupo de emprendedores del NCSA (Centro Nacional de Aplicacionespara Supercomputadoras, donde Mosaic, el primer navegador web grco, fue desarrollado) solucion este problemapermitiendo que el servidor web invocara programas externos capaces de generar HTML dinmicamente. Ellos llamarona este protocolo Puerta de Enlace Comn, o CGI 1, y esto cambi la web para siempre.

    Ahora es duro imaginar la revelacin que CGI debe haber sido: en vez de tratar con pginas HTML como simplesarchivos del disco, CGI te permite pensar en pginas como recursos generados dinmicamente bajo demanda. Eldesarrollo de CGI hace pensar en la primera generacin de pgina web dinmicas.

    Sin embargo, CGI tiene sus problemas: los scripts CGI necesitan contener gran cantidad de cdigo repetitivo quelos hace difcil de reutilizar, as como complicados de entender y escribir para los desarrolladores novatos.

    PHP solucion varios de estos problemas y tom al mundo por sorpresa --ahora es, por lejos, la herramienta mspopular usada para crear sitios web dinmicos, y decenas de lenguajes y entornos similares (ASP, JSP, etc.) siguieronde cerca el diseo de PHP. La mayor innovacin de PHP es que es fcil de usar: el cdigo PHP es simple de embeberen un HTML plano; la curva de aprendizaje para algunos que recin conocen HTML es extremadamente llana.

    Pero PHP tiene sus propios problemas; por su facilidad de uso alienta a la produccin de cdigo mal hecho. Loque es peor, PHP hace poco para proteger a los programadores en cuanto a vulnerabilidades de seguridad, por lo quemuchos desarrolladores de PHP se encontraron con que tenan que aprender sobre seguridad cuando ya era demasiadotarde.

    Estas y otras frustraciones similares, condujeron directamente al desarrollo de los actuales frameworks de desarrolloweb de tercera generacin. Estos frameworks -- Django y Ruby on Rails parecen ser muy populares en estos das-- reconocen que la importancia de la web se ha intensicado en los ltimos tiempos. Con esta nueva explosin deldesarrollo web comienza otro incremento en la ambicin; se espera que los desarrolladores web hagan ms y ms cadada.

    Django fue inventado para satisfacer esas nuevas ambiciones. Django te permite construir en profundidad, deforma dinmica, sitios interesantes en un tiempo extremadamente corto. Django est diseado para hacer foco en ladiversin, en las partes interesantes de tu trabajo, al mismo tiempo que alivia el dolor de las partes repetitivas. Alhacerlo, proporciona abstracciones de alto nivel de patrones comunes del desarrollo web, ata