Django 2. Antonio Melé
Чтение книги онлайн.
Читать онлайн книгу Django 2 - Antonio Melé страница 16
Las vistas basadas en clase ofrecen algunas ventajas frente a las vistas de función:
• Permiten organizar el código según métodos HTTP, como GET, POST o PUT, en métodos de clase separados, en vez de usar sentencias condicionales.
• Permiten utilizar herencia múltiple para crear vistas reutilizables (también conocidas como mixins).
Para obtener más información, la documentación de Django ofrece una introducción a las vistas basadas en clase en https://docs.djangoproject.com/en/2.0/topics/class-based-views/intro/.
Se va a cambiar la vista post_list para que funcione como una vista basada en clase usando la clase ListView de Django. Esta clase permite listas de objetos de cualquier tipo.
Edite el fichero views.py de la aplicación blog y añada las siguientes líneas:
Esta vista basada en clase es análoga a la vista previa post_list. En el código anterior ha especificado a ListView lo siguiente:
• Utiliza un QuerySet específico en vez de utilizar el que devuelve todos los objetos. En vez de definir el atributo queryset, podría haber especificado model = Post y Django hubiera construido el QuerySet genérico Post.objects.all() por usted.
• El nombre de la variable de contexto que contiene todos los elementos es posts. Si no se especifica nada, el nombre por defecto es object_list.
• Que cada página contenga tres elementos.
• La plantilla que debe utilizar para renderizar la página, sino ListView utilizará la plantilla por defecto blog/post_list.html.
Queda por modificar el fichero urls.py de la aplicación blog. Comente el patrón de post_list y añada un nuevo patrón de URL para la clase PostListView del siguiente modo:
Para poder mantener la paginación en funcionamiento, es necesario pasar a la plantilla el objeto de página correcto. La vista genérica ListView de Django pasa la página seleccionada en una variable llamada page_obj, por lo que hay que editar la plantilla post/list.html de acuerdo con dicho nombre. Para ello realizará la siguiente modificación:
Para verificar que todo funciona correctamente del mismo modo que lo hacía la vista post_list, abra http://127.0.0.1:8000/blog/ en el navegador. Este es un ejemplo sencillo de una vista basada en clase que utiliza una clase genérica provista por Django. Se profundizará más sobre vistas basadas en clase en el capítulo 10, Construir una plataforma E-Learning, y en capítulos sucesivos.
Resumen
En este capítulo se han descrito los elementos básicos de Django para la creación de una aplicación tipo blog. Se han diseñado los modelos de datos, aplicando migraciones al proyecto. También se han creado las vistas, plantillas y patrones de URL necesarios para el blog, incluyendo la paginación.
En el siguiente capítulo se describe cómo mejorar el blog con un sistema de comentarios y etiquetado y permitir a los usuarios compartir artículos por email.
2
Funciones avanzadas del blog
En el capítulo anterior creó una aplicación sencilla tipo blog. En este capítulo se mejorará la aplicación con funcionalidades avanzadas como compartir artículos por email, añadir comentarios, etiquetar artículos y recuperar artículos por semejanza. En este capítulo se tratarán los siguientes puntos:
• Envío de emails con Django.
• Creación y gestión de formularios en vistas.
• Creación de formularios a partir de modelos de datos.
• Integración con aplicaciones de terceros.
• Construcción de QuerySets complejos.
Compartir artículos por email
Lo primero que se hará será permitir que los usuarios compartan artículos enviando un correo electrónico. Piense cómo podría usar las vistas, los patrones de URL y las plantillas para crear esta funcionalidad con lo que aprendió en el capítulo anterior. Ahora, se detallará qué necesita para permitir a los usuarios enviar artículos por email:
• Crear un formulario para los usuarios para rellenar su nombre y correo electrónico, el correo del destinatario y un comentario, como campo opcional.
• Crear una vista en el fichero views.py que gestione los datos y envíe el email.
• Añadir un patrón de URL para la nueva vista en el fichero urls.py de la aplicación blog.
• Crear una plantilla para visualizar el formulario.
Crear formularios en Django
A continuación, se describe cómo elaborar un formulario para compartir artículos. Django tiene un sistema de formularios con el que crear formularios web de una manera sencilla. Este sistema permite definir los campos del formulario, el modo en que se visualizan y la forma de validación de la entrada de datos. Con este sistema, Django ofrece una forma sencilla y flexible de visualizar formularios y gestionar datos.
Django incluye dos clases base para la elaboración de formularios:
• Form, que permite construir un formulario estándar.
• ModelForm, que permite construir un formulario a partir de una instancia de modelo de datos.
Primero cree el fichero forms.py dentro del directorio blog de la aplicación con el siguiente contenido:
Este es el primer formulario de Django. La clase que ha creado hereda de la clase base Form, donde se definen diferentes atributos con tipos específicos, encargados de la validación de los campos.
El tipo