Proyecto Django para crear un Sistema de Comentarios

Comentar en una publicación es la característica más común que tiene una publicación e implementar en Django es mucho más fácil que en otros marcos. Para implementar esta función, hay una serie de pasos que deben seguirse, pero primero comencemos creando un nuevo proyecto.

¿Cómo crear la función de comentario en Django?

  • Abra el símbolo del sistema y ejecute los siguientes comandos.

Inicie un nuevo proyecto Django como:

django-admin startproject my_project

Después de ejecutar este comando, verá los siguientes archivos y carpetas que Django crea para usted. Para ver esta carpeta, puede usar el comando de árbol en el símbolo del sistema o abrir la carpeta en un ide, en mi caso, he usado el editor de texto sublime .
 

Crear una nueva aplicación como:

python manage.py startapp portfolio_app

Django crea automáticamente archivos para que puedas concentrarte en tu tarea sin preocuparte por otras cosas como crear un archivo y estructurarlo.
 

En este artículo haremos un modelo de publicación para publicar una imagen:

La publicación consta de los siguientes campos:

1.Image
2.Caption or description
3.Date posted
4.Author of the image.

Primero, importando los módulos requeridos en models.py :

from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User

Ahora, continuando con el módulo models.py, agregue el siguiente fragmento.

python3

class Post(models.Model):
    image = models.ImageField(
        default ="default_foo.png", upload_to ="post_picture")
    caption = models.TextField()
    date_posted = models.DateTimeField(default = timezone.now)
    author = models.ForeignKey(User, on_delete = models.CASCADE)
 
    def __str__(self):
        return f'{self.author.username}\'s Post- {self.title}'
 
    def save(self, *args, **kwargs):
        super().save(*args, **kwargs)
        img = Image.open(self.image.path)
        if img.height > 400 or img.width > 400:
            output_size = (300, 300)
            img.thumbnail(output_size)
            img.save(self.image.path)

El nombre del modelo es post model (podría ser cualquiera de su elección). Entendamos los detalles de cada archivo utilizado.

Campo de imagen: Este campo permite almacenar la imagen en la base de datos. El valor predeterminado incluye una imagen predeterminada que he denominado default_foo.png. Se guarda automáticamente cuando no hay ninguna imagen disponible o publicada por el usuario. Esta imagen se encuentra en una carpeta llamada Media en su directorio my_project. Si un usuario carga una imagen, se carga en el directorio llamado post_picture, establecido por el atributo upload_to.

Leyenda: este campo muestra la descripción de la imagen nombrada como leyenda para el campo de imagen.

Fecha de publicación : este campo tiene en cuenta la hora y la fecha en que se carga la imagen. El valor predeterminado timezone.now guarda la hora en que se crea esta publicación. La hora/fecha no cambia si la publicación se actualiza más tarde después de la publicación.

Autor: este atributo tiene en cuenta el usuario que publicó esta publicación. Toma el usuario django como parámetro para hacerlo. El archivo on_delete se ocupa de las anomalías que podrían ocurrirle a la publicación si se elimina a un usuario. Modelos, el campo en cascada elimina todos los datos de publicación relacionados con el usuario simultáneamente cuando se elimina un usuario.

Método __str__: estos métodos también se conocen como métodos mágicos en python. Se toma a sí mismo como sus atributos. Este método muestra la información del título al administrador de Django en el backend.

método de guardar: este método se anula para guardar la publicación con valores personalizados por el usuario. Si queremos guardar imágenes de un tamaño particular en nuestra base de datos, se utiliza el método de guardar para hacerlo. Para esto, debe importar PIL en su módulo models.py para leer la imagen. Abra la imagen mediante el método abierto en una variable y guárdela en un tamaño de salida particular en su base de datos para evitar el almacenamiento de imágenes grandes en su base de datos.

Después de crear con éxito el modelo de publicación, ejecute los siguientes comandos en la terminal para realizar y guardar los cambios en la base de datos.

python manage.py makemigrations
python manage.py migrate

Esto creará la tabla de publicaciones en su base de datos. Estoy usando la base de datos predeterminada de Django. 

Para visualizar sus tablas y bases de datos, le recomiendo que descargue DB Browser para sqlite , que le proporcionará una interfaz para ver y editar todos sus esquemas.

Después de implementar su modelo de publicación, ahora es el momento de implementar la función de comentarios en su publicación.

  1. Cree un formulario en el módulo Forms.py para obtener los datos.
  2. Cree una función para guardar o eliminar el comentario en el módulo views.py.
  3. Obtenga los comentarios del archivo html.

Cree un formulario para recopilar el contenido del comentario en el módulo Forms.py . Si no tiene form.py en su aplicación django, cree uno.

Django tiene formularios incorporados para crearlo y acceder a él directamente sin escribir uno nuevo desde cero.

python3

from django import forms
from .models import Comment
 
class CommentForm(forms.ModelForm):
    content = forms.CharField(label ="", widget = forms.Textarea(
    attrs ={
        'class':'form-control',
        'placeholder':'Comment here !',
        'rows':4,
        'cols':50
    }))
    class Meta:
        model = Comment
        fields =['content']

Moviéndose al módulo views.py , para procesar y guardar los datos provenientes del formulario html, continúa el siguiente código. Estoy implementando la función de comentarios en la vista de detalles de la publicación, puede usarla donde quiera, el método sería el mismo.

python3

from .forms import CommentForm
 
def post_detailview(request, id):
   
  if request.method == 'POST':
    cf = CommentForm(request.POST or None)
    if cf.is_valid():
      content = request.POST.get('content')
      comment = Comment.objects.create(post = post, user = request.user, content = content)
      comment.save()
      return redirect(post.get_absolute_url())
    else:
      cf = CommentForm()
       
    context ={
      'comment_form':cf,
      }
    return render(request, 'socio / post_detail.html', context)

Importando CommentForm desde el módulo forms.py, crea un objeto de commentform y verifica si es válido. Django proporciona una función integrada para verificar las credenciales y el formato del formulario mediante el método is_valid

Al raspar el contenido de la publicación con el método get y crear un nuevo comentario con el método create seguido del método Save, se guardan los datos del objeto creado al crear una nueva publicación en la base de datos.

El objeto cf se pasa al html por diccionario de contexto para acceder a todos los comentarios en HTML.

Finalmente, para obtener los datos del formulario html, se usa una etiqueta de formulario con el método utilizado como publicación, ya que tenemos que enviar los datos al servidor. El siguiente fragmento muestra cómo se toma el valor del formulario en el html.

html

{% load crispy_forms_tags %}
<html>
  <head>
  <title></title>
  </head>
<body> 
  <form method="POST">
    {% csrf_token %}
    {{comment_form.as_p}}
  </form>
</body>

Aquí, Csrf_token se usa con fines de seguridad. Django maneja el cifrado de formulario a través de este token.

El método as_p se usa para mostrar el formulario en forma de párrafo para una mejor visualización.

Producción – 

Caja de comentarios

Puede mostrar todos los comentarios a través del bucle for en HTML. Django proporciona un nuevo lenguaje HTML para acceder a datos y variables pasadas en el contexto en el módulo views.py que contiene bucles for, condiciones if-else, etc.

Puede ver estas características en mi proyecto de sitio de redes sociales en mi github.

https://github.com/Shikharm16/social-media-site-using-django

Publicación traducida automáticamente

Artículo escrito por shikhar16 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *