Kitabı oku: «Django 2»
Django 2

Django 2
Antonio Melé

Copyright © Packt Publishing 2018. First published in the English language under the title Django 2 by Example – (9781788472487).
Primera edición original publicada en inglés por Packt Publishing Ltd. con el título: Django 2 by Example, © 2018 Antonio Melé
Título de la edición en español: Django 2
Primera edición en español, año 2020
© 2020 MARCOMBO, S.L.
Traducción: Aitor Ruiz Fajardo y Jaime Fernández Martín
Correctora: Nuria Barroso
Directora de producción: M.a Rosa Castillo
«Cualquier forma de reproducción, distribución, comunicación pública o transformación de esta obra solo puede ser realizada con la autorización de sus titulares, salvo excepción prevista por la ley. Diríjase a CEDRO (Centro Español de Derechos Reprográficos, www.cedro.org) si necesita fotocopiar o escanear algún fragmento de esta obra».
ISBN: 978-84-267-2866-1
Producción del ebook: booqlab.com
Para mi hermana
Acerca del autor
Antonio Melé es CTO de Exo Investing y fundador de Zenx IT. Antonio ha desarrollado proyectos Django desde 2006 para clientes de distintas industrias. También ha trabajado como CTO y consultor de tecnología para múltiples startups y ha gestionado equipos de desarrollo tecnológico para negocios digitales. Antonio es ingeniero superior en informática por la Universidad Pontificia Comillas. Su padre le inspiró su pasión por los ordenadores y la programación.
Acerca de los traductores
Aitor Ruiz Fajardo es Senior Software Development Engineer en Voysis en Dublín. Aitor ha trabajado principalmente en el desarrollo de arquitecturas y aplicaciones Java en proyectos para múltiples empresas en distintos sectores. Entusiasta del software y la gestión desde bien pequeño, Aitor es ingeniero superior en informática por la Universidad Carlos III de Madrid.
Jaime Fernández Martín es un consultor digital especializado en la implantación de software para negocios. Lleva trabajando con Python desde hace más de 10 años y ha sido coorganizador de Python-Madrid. Ha trabajado en diferentes sectores como: biotecnología, aeronáutica, telecomunicaciones, energía y financiero, aplicando la tecnología como medio para mejorar los procesos de negocio. Jaime es ingeniero informático por la Universidad Politécnica de Madrid, con un máster en inteligencia artificial por la misma universidad, y un MBA por CESMA Business School.
Contenido
Prefacio
1. Crear un blog
Instalar Django
Crear un entorno de desarrollo Python
Instalar Django mediante pip
Crear el primer proyecto
Arrancar el servidor de desarrollo
Configuración del proyecto
Proyecto y aplicaciones
Crear una aplicación
Esquema de datos del blog
Activar la aplicación
Crear y activar migraciones
Sitio de administración para los modelos
Crear un superusuario
El sitio de administración de Django
Añadir modelos al sitio de administración
Personalizar la vista de modelos
Trabajando con QuerySets y Managers
Crear objetos
Actualizar objetos
Recuperar objetos
Valiéndose del método filter()
Uso de exclude()
Uso de order_by()
Eliminar objetos
Cuándo se evalúan los QuerySets
Crear gestores de modelos
Elaborar listas de detalle y listado
Creación de vistas de detalle y listado
Añadir patrones de URL para las vistas
Crear plantillas para vistas
Añadir paginación
Usar vistas basadas en clase
Resumen
2. Funciones avanzadas del blog
Compartir artículos por email
Crear formularios en Django
Usar formularios en vistas
Enviar emails con Django
Renderizar formularios en plantillas
Crear un sistema de comentarios
Crear formularios de un modelo
Funcionamiento de ModelForms en vistas
Añadir comentarios a la plantilla de detalle de artículos
Añadir funcionalidad de etiquetado
Recuperar artículos por similitud
Resumen
3. Extensiones para el blog
Crear filtros y etiquetas de plantilla personalizados
Crear etiquetas de plantilla personalizadas
Crear filtros de plantilla personalizados
Añadir un mapa de sitio
Sistema de feeds
Crear un sistema de búsqueda para el blog
Instalar PostgreSQL
Búsquedas sencillas
Búsqueda sobre múltiples campos
Construir una vista de búsqueda
Lematización y resultados por semejanza
Orden de relevancia en búsquedas
Búsquedas por similitud de trigrama
Otros motores de búsqueda de texto completo
Resumen
4. Construir una aplicación social
Crear un proyecto de red social
Iniciar el proyecto de red social
Utilizar el sistema de autenticación de Django
Crear una vista de inicio de sesión
Utilizar las vistas de autenticación de Django
Vistas para iniciar y cerrar sesión
Vistas para modificar la contraseña
Vistas para restaurar la contraseña
Registro y perfiles de usuario
Registro de usuarios
Extender el modelo de usuario
Usar un modelo de usuario personalizado
Utilizar el sistema de mensajes
Crear un backend de autenticación personalizado
Añadir autenticación social a la web
Autenticación mediante Facebook
Autenticación mediante Twitter
Autenticación mediante Google
Resumen
5. Compartir contenido en su web
Crear un sitio web para compartir imágenes
Construir el modelo imagen
Crear relaciones muchos a muchos
Registrar el modelo imagen en el portal de administración
Enviar contenido desde otros sitios web
Validar campos de formulario
Sobrescribir el método save() de un ModelForm
Elaborar un bookmarklet con jQuery
Crear una vista de detalle para las imágenes
Crear miniatura de imágenes utilizando sorl-thumbnail
Añadir acciones AJAX con jQuery
Cargar jQuery
Falsificación de petición en sitios cruzados con AJAX
Realizar peticiones AJAX con jQuery
Crear decorados para vistas
Añadir paginación AJAX a listados
Resumen
6. Seguimiento de acciones de usuario
Construir un sistema de seguidores
Crear relaciones muchos a muchos a través de un model intermedio
Crear vistas de listado y detalle para perfiles de usuario
Construir una vista AJAX para seguir usuarios
Construir un feed de actividad
Utilizar el sistema de contenttypes
Añadir relaciones genéricas a modelos
Evitar registrar acciones duplicadas
Añadir acciones de usuario al registro de actividad
Mostrar el registro de actividad
Optimizar QuerySets que involucran objetos relacionados
Utilizar select_related()
Utilizar prefetch_related()
Crear plantillas parea acciones
Usar señales para desnormalizar conteos
Trabajar con señales
Clases de configuración de aplicaciones
Usar Redis para contabilizar visualizaciones
Instalar Redis
Usar Redis con Python
Almacenamiento total de visualizaciones en Redis
Almacenar un ranking en Redis
Siguientes pasos con Redis
Resumen
7. Construir una tienda online
Crear un proyecto de tienda online
Modelo de catálogo de productos
Registrar el catálogo en el panel de administración
Construir vistas de catálogo
Crear plantillas de catálogo
Construir un carro de la compra
Sistema de sesiones en Django
Configuración de sesión
Expiración de sesión
Almacenar carros de compra en sesión
Vistas para el carro de la compra
Añadir elementos al carro
Construir una plantilla para mostrar el carro
Añadir productos al carro
Modificar la cantidad de producto en el carro
Crear un procesador de contexto para el carro actual
Registrar órdenes de clientes
Crear modelo de órdenes
Añadir los modelos de órdenes al panel de administración
Crear órdenes de clientes
Ejecutar tareas asíncronas con Celery
Instalar Celery
Instalar RabbitMQ
Añadir Celery al proyecto
Añadir tareas asíncronas a su aplicación
Monitorizar Celery
Resumen
8. Gestión de pagos y pedidos
Integrar una pasarela de pago
Crear una cuenta de prueba en Braintree
Instalar el módulo Python de Braintree
Integrar la pasarela de pago
Integrar Braintree con Hosted Fields
Probar los pagos
Desplegando en producción
Exportar órdenes de pedido a CSV
Añadir acciones en el panel de administración
Personalizar vistas en el panel de administración
Generar facturas en PDF dinámicamente
Instalar WeasyPrint
Crear una plantilla PDF
Renderizar ficheros PDF
Enviar ficheros PDF por email
Resumen
9. Extensión de tienda online
Creación de un sistema de cupones
Modelos para cupones
Aplicar un cupón al carro de la compra
Aplicar cupones a órdenes
Añadir internacionalización y localización
Internacionalización con Django
Configuración de internacionalización y localización
Determinar el idioma en Django
Preparar el proyecto para internacionalización
Traducir código Python
Traducción estándar
Traducciones perezosas
Traducciones incluyendo variables
Traducción de plurales
Traducción de código
Traducir plantillas
La etiqueta de plantilla {% trans %}
La etiqueta de plantilla {% blocktrans %}
Traducir plantillas de la tienda
Rosetta: Interfaz de traducción
Traducciones perezosas
Patrones de URL para internacionalización
Añadir un prefijo de idioma al patrón de URL
Traducir patrones de URL
Permitir cambio de idioma a los usuarios
Traducción de modelos con django-parler
Instalar django-parler
Traducir campos de modelo
Integrar traducciones en el panel de administración
Crear migraciones para traducciones de modelos
Adaptar vista para traducciones
Formato localizado
Validar campos de formulario con django-localflavor
Crear un sistema de recomendación
Recomendar productos en base a compras anteriores
Resumen
10. Construir una plataforma e-learning
Configurar el proyecto e-learning
Construir el modelo curso
Registrar los modelos en el sitio de administración
Usar fixtures para crear datos iniciales para los modelos
Utilizar modelos para contenido diverso
Utilizar herencia de modelos
Modelos abstractos
Herencia multitabla de modelos
Modelos Proxy
Crear los modelos de contenido
Campos de modelo personalizados
Añadir orden a objetos de módulos y contenidos
Crear un CMS
Añadir un sistema de autenticación
Crear las plantillas de autenticación
Crear vistas basadas en clases
Utilizar mixins para las vistas basadas en clases
Trabajar con grupos y permisos
Restringir el acceso a las vistas basadas en clases
Gestionar módulos y contenido de los cursos
Utilizar conjuntos de formularios para los módulos del curso
Añadir contenido a los módulos de un curso
Gestionar módulos y contenidos
Reordenar módulos y contenidos
Utilizar mixins de django-braces
Resumen
11. Renderizar y cachear contenido
Mostrar cursos
Añadir el registro de estudiantes
Crear una vista de registro para estudiantes
Inscribir estudiantes en cursos
Acceder al contenido del curso
Renderizar diferentes tipos de contenido
Utilizar el sistema de caché
Sistemas de caché disponibles
Instalar Memcached
Configurar la caché
Añadir Memcached al proyecto
Monitorizar Memcached
Niveles de caché
Usar la API de caché de bajo nivel
Cachear basándose en datos dinámicos
Cachear fragmentos de plantilla
Cachear vistas
Usar caché a nivel de sitio web
Resumen
12. Construir una API
Construir una API RESTful
Instalar Django REST framework
Definir serializadores
Entender los parsers y renderers
Construir vistas de listado y detalle
Crear serializadores anidados
Crear vistas personalizadas
Gestionar la autenticación de usuarios
Añadir permisos a vistas
Crear conjuntos de vistas y enrutadores
Añadir acciones adicionales a conjuntos de vistas
Crear permisos personalizados
Serializar contenidos de cursos
Resumen
13. Lanzamiento en producción
Crear un entorno de producción
Configuración para distintos entornos
Utilizar PostgreSQL
Comprobar su proyecto
Servir Django mediante WSGI
Instalar uWSGI
Configurar uWSGI
Instalar NGINX
El entorno de producción
Configurar NGINX
Servir archivos estáticos y media
Securizar conexiones con SSL
Crear un certificado SSL
Configurar NGINX para utilizar SSL
Configurar su proyecto con SSL
Crear un middleware a medida
Crear un middleware para gestionar subdominios
Servir múltiples dominios con NGINX
Comandos de administración personalizados
Resumen
Prefacio
Django es un potente framework web escrito en Python que fomenta un desarrollo rápido y un diseño limpio y pragmático, a la par que ofrece una curva de aprendizaje relativamente suave, lo que lo hace atractivo tanto para programadores novatos como expertos.
Este libro le guiará a través de todo el proceso del desarrollo de aplicaciones web profesionales con Django. El libro no solo cubre los aspectos más relevantes del framework, sino que también muestra cómo integrar otras tecnologías populares en proyectos Django.
Este volumen le enseñará a crear aplicaciones reales, solucionar problemas comunes e implementar las mejores prácticas mediante un enfoque paso a paso fácil de seguir.
Después de leer este libro sabrá cómo funciona Django y cómo utilizarlo para elaborar aplicaciones web prácticas con funcionalidades avanzadas.
A quién va dirigido este libro
Este libro va dirigido a programadores con conocimientos de Python que quieren aprender Django de una forma práctica. Tanto si Django es un framework nuevo para usted, como si ha trabajado con él pero quiere dominarlo, este libro es el más adecuado para usted. Le ayudará a dominar las funciones más relevantes del framework creando proyectos completos desde cero. Para leerlo es necesario estar familiarizado con conceptos de programación y tener un conocimiento básico de Python, HTML y JavaScript.
Cómo aprovechar este libro
Para sacar el máximo rendimiento a este libro, se recomienda tener un buen conocimiento de Python y conocimientos básicos de HTML y JavaScript. Antes de adentrarse en sus páginas se recomienda leer las partes 1 a 3 del tutorial de la documentación oficial de Django en https://docs.djangoproject.com/es/2.0/intro/tutorial01/.
Descarga del código asociado al libro
En la parte inferior de la primera página del libro encontrará el código de acceso que le permitirá acceder de forma gratuita a los contenidos adicionales en www.marcombo.info.
1
Crear un blog
Con este libro aprenderá a desarrollar proyectos Django, listos para su funcionamiento en producción. En caso de que aún no haya instalado Django, aprenderá cómo hacerlo en la primera parte de este capítulo. En este también se verá cómo crear una sencilla aplicación de blog con Django. El propósito principal de este capítulo es tener una visión general del framework, comprender cómo interactúan los diferentes componentes entre sí y obtener las habilidades necesarias para crear un proyecto Django con funcionalidades sencillas. Este capítulo le guiará en la creación de un proyecto Django completo sin entrar en detalle en cada paso. Los diferentes componentes utilizados en este capítulo se describen en los siguientes capítulos.
Este capítulo trata los siguientes puntos:
• Instalar Django y crear un primer proyecto.
• Diseñar modelos de datos y generar migraciones.
• Crear un sitio de administración para modelos de datos.
• Utilizar QuerySets y Managers.
• Construir vistas, plantillas y URLs.
• Añadir paginación a vistas de listado.
• Usar vistas basadas en clases.
Instalar Django
Si ya ha instalado Django puede saltar a la siguiente sección Crear mi primer proyecto. Django es un paquete Python y, como tal, puede instalarse en cualquier entorno Python. Si aún no ha instalado Django, los siguientes pasos le guiarán para instalarlo en un entorno local de desarrollo.
Django 2.0 requiere la versión de Python 3.4 o superior. En los ejemplos de este libro utilizaremos Python 3.6.5. Si usa un sistema operativo Linux o macOS X, probablemente tenga instalado Python por defecto. Si usa otro tipo de plataformas, como Windows, puede descargar un instalador de Python desde https://www.python.org/downloads/windows/.
En caso de duda, puede comprobar si Python está instalado en su ordenador introduciendo el comando python en una consola. Si tras ejecutarlo aparece un texto similar al mostrado a continuación, Python está instalado en su sistema:

Si la versión de Python instalada es inferior a la 3.4, o si no tiene Python instalado en su sistema, descargue Python 3.6.5 desde https://www.python.org/downloads/ e instálelo. Si dispone de un sistema de gestión de paquetes en su sistema operativo, es recomendable realizar la instalación a través de él.
Al utilizar Python 3 no es necesario instalar una base de datos, ya que esta versión de Python incluye la base de datos SQLite en la instalación por defecto. SQLite es una base de datos ligera que se puede usar con Django para entornos de desarrollo. Para desplegar una aplicación en un entorno de producción, es necesario utilizar otro tipo de bases de datos avanzadas como PostgreSQL, MySQL u Oracle. Puede obtener más información sobre cómo configurar una base de datos con Django en https://docs.djangoproject.com/en/2.0/topics/install/#database-installation.