Django 2. Antonio Melé

Читать онлайн.
Название Django 2
Автор произведения Antonio Melé
Жанр Математика
Серия
Издательство Математика
Год выпуска 0
isbn 9788426728661



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

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 añadido el campo booleano active para poder desactivar comentarios inapropiados de manera manual. El campo created lo utilizará para ordenar los comentarios de manera cronológica por defecto.

      El nuevo modelo Comment que acaba de crear no está sincronizado con la base de datos. Va a ejecutar el siguiente comando para generar una nueva migración que refleje la creación de un nuevo modelo:

Illustration

      A continuación debería ver por salida:

Illustration

      Django ha generado el fichero 0002_comment.py dentro del directorio migrations/ de la aplicación blog. Ahora es necesario crear un esquema y aplicar los cambios a la base de datos. Para ello ejecute:

Illustration

      La salida obtenida debería ser semejante a esta:

Illustration

      La migración que acaba de crear se ha aplicado, apareciendo la tabla blog_comment.

      Ya puede añadir el nuevo modelo al panel de administración para poder gestionar comentarios a través de esta sencilla interfaz. Abra el fichero admin.py de la aplicación blog, importe el modelo Comment y añada la clase ModelAdmin:

Illustration

      Arranque el servidor con el comando python manage.py runserver y abra la URL http://127.0.0.1:8000/admin/ en el navegador. En este punto debería aparecer la sección BLOG como se muestra en la imagen:

Illustration

      El modelo está registrado en el panel de administración y puede gestionar instancias Comment a través de la interfaz.

      Seguirá necesitando elaborar un formulario para que los usuarios puedan escribir comentarios de un artículo del blog. Recuerde que Django dispone de dos clases base para construir formularios: Form y ModelForm. Ya ha utilizado la primera anteriormente para permitir a los usuarios compartir artículos vía email. En este caso, va a utilizar la clase ModelForm para crear un formulario dinámicamente a partir del modelo Comment. Edite el fichero forms.py de la aplicación blog con las siguientes líneas:

Illustration

      Para crear un formulario a partir de un modelo, necesitamos indicar qué modelo usar para la construcción del formulario en la clase Meta de este último. Django inspecciona el modelo y construye un formulario dinámicamente por usted. Cada tipo de campo del modelo tiene su correspondiente tipo de campos de formulario. La manera en que defina los campos de los modelos se tendrá en cuenta para la validación de los formularios. Por defecto, Django construye un campo de formulario por cada campo del modelo. Sin embargo, puede indicar explícitamente qué campos quiere incluir en el formulario con la lista fields o definir qué campos quiere excluir con la lista exclude. Para el formulario CommentForm, ha usado los campos name, email y body porque estos son los campos que los usuarios podrán rellenar.

      La idea consiste en utilizar la vista de detalle de artículos para instanciar un formulario y procesarlo de una forma sencilla. Para ello, edite el fichero views.py, importe el modelo Comment y el formulario CommentForm, y modifique la vista post_detail del siguiente modo:

Illustration