Django 2. Antonio Melé

Чтение книги онлайн.

Читать онлайн книгу Django 2 - Antonio Melé страница 18

Автор:
Серия:
Издательство:
Django 2 - Antonio Melé

Скачать книгу

en la plantilla, indicando que el formulario se ha enviado correctamente. Dada la necesidad de incluir en el correo un enlace al artículo, es necesario recuperar la ruta absoluta con el método get_absolute_url(). Se usa esta ruta como parámetro de entrada para request.build_absolute_uri(), construyendo una URL completa, incluyendo el esquema HTTP y nombre de dominio. Para construir el asunto y el cuerpo del mensaje se utilizan los datos procesados del formulario, una vez validado, y, por último, se envía el correo a la dirección estipulada en el campo to del formulario.

      Ahora que la vista está completa, recuerde que es necesario añadir un nuevo patrón de URL. Para ello habrá que editar el fichero urls.py de la aplicación blog e incluir el patrón para la vista post_share:

Illustration

      Después de haber creado el formulario, programado la vista y añadido el patrón de URL, solo falta la plantilla de la vista. Para ello va a crear un nuevo fichero dentro de la ruta blog/templates/blog/post/ llamado share.html con el siguiente contenido:

Illustration

      Esta es la plantilla encargada de mostrar el formulario o un mensaje en caso de haber podido mandar el email. Como se puede observar, ha creado el elemento de formulario para que sea enviado por el método POST:

Illustration

      Después, le sigue la instancia del formulario. Le indicará a Django que renderice los campos en HTML con modo párrafo, es decir, con elementos <p> a través del método as_p. También puede mostrar el formulario como una lista de elementos utilizando as_ul, o como una tabla, a través del método as_table. Si quiere renderizar cada campo, puede iterar sobre cada uno de ellos del siguiente modo:

Illustration

      La etiqueta de plantilla {% csrf_token %} introduce un campo oculto con un token autogenerado para evitar ataques de tipo Cross-Site Request Forgery (CSRF). Este ataque consiste en un programa o sitio web malicioso realizando acciones no deseadas en nombre de un usuario en su sitio web. Se puede obtener más información en https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF).

      La etiqueta mencionada genera un campo oculto con un código similar al siguiente:

Illustration

      Illustration Por defecto, Django verifica el token CSRF en todas las solicitudes tipo POST. Es importante recordar la inclusión de las etiquetas csrf_token en todos los formularios enviados vía POST.

      Va a modificar la plantilla blog/post/detail.html y añadir el siguiente link para compartir la URL del artículo después de la variable {{ post.body | linebreaks }}:

Illustration

      Es necesario recordar que está construyendo URLs de forma dinámica usando la etiqueta {% url %} ofrecida por Django. Está utilizando el espacio de nombres blog y la URL post_share, y se pasa como parámetro el identificador del artículo para conformar la URL completa.

      Va a revisar lo que ha realizado arrancando el servidor de desarrollo con python manage.py runserver y abriendo la URL http://127.0.0.1:8000/blog/ en el navegador. Seleccione cualquier título de artículo para visitar el detalle. Bajo el contenido del artículo, debería ver el enlace que ha añadido como se aprecia en las imágenes:

Illustration

      Si pincha en el enlace Share this post, le redirige a la página que incluye el formulario de compartición vía email de artículos.

Illustration

      Los estilos CSS para el formulario están incluidos en el código de ejemplo en el fichero static/css/blog.css. Tras seleccionar el botón Send e-mail, el formulario se envía y valida. Si todos los campos contienen información válida, obtendrá un mensaje de confirmación como este:

Illustration

      Si la información de entrada no es válida, el formulario se vuelve a visualizar incluyendo los errores de validación:

Illustration

      Hay que tener en cuenta que los navegadores modernos evitan el envío de información errónea o vacía. Esto se debe a que el navegador realiza una validación previa en base al tipo de campo y sus restricciones. En este caso, el formulario no será enviado y el formulario mostrará sus propios mensajes de error para los campos incorrectos.

      El formulario para compartir artículos vía email está terminado. Lo siguiente es crear un sistema de comentarios para el blog.

      Ahora va a elaborar un sistema de comentarios para el blog, donde los usuarios puedan comentar los artículos. Para crear este sistema, es necesario realizar los siguientes pasos:

      1. Crear un modelo para guardar los comentarios.

      2. Crear un formulario para enviar comentarios y validar la entrada de datos.

      3. Añadir una vista que procese el formulario y guarde el nuevo comentario en la base de datos.

      4. Editar la plantilla de detalle de artículos para mostrar un listado de comentarios y el formulario para añadir nuevos.

      Empezará por crear un modelo para almacenar los comentarios. Para ello va a editar el fichero models.py de la aplicación blog con el siguiente código:

Illustration

      Este es el modelo Comment. Contiene una ForeignKey para asociar un comentario con un único artículo. Esta relación muchos a uno es definida en el modelo Comment porque cada comentario estará constituido por un único artículo, y cada artículo puede tener muchos comentarios. El atributo related_name permite nombrar el atributo que compone esta relación, desde el lado del objeto referenciado. Después de definirlo, puede recuperar los artículos de una instancia de comentario usando comment.post, y recuperar todos los comentarios a un artículo con post.comments.all(). Si no usara el parámetro related_name, Django usará el nombre del modelo en minúsculas seguido de _set (es decir, comment_set) para nombrar el gestor de la relación inversa.

      Para obtener más información de las relaciones muchos a uno puede visitar https://docs.djangoproject.com/en/2.0/topics/db/examples/many_to_one/.

      Ha

Скачать книгу