Comentar sobre uma postagem é o recurso mais comum que uma postagem tem e implementar no Django é muito mais fácil do que em outros frameworks. Para implementar este recurso, existem alguns passos que devem ser seguidos, mas primeiro vamos começar criando um novo projeto.

Como criar um recurso de comentário no Django?

  • Abra o prompt de comando e execute os seguintes comandos.

    Comece um novo projeto django como:

    django-admin startproject my_project
  • Após executar este comando, você verá os seguintes arquivos e pastas que o django cria para você. Para ver essa pasta, você pode usar o comando tree no prompt de comando ou abrir a pasta em um ide, no meu caso usei o editor de texto sublime .



    Crie um novo aplicativo como:

    python manage.py startapp portfolio_app
  • O Django cria arquivos automaticamente para que você possa se concentrar em sua tarefa sem se preocupar com outras coisas, como criar um arquivo e estruturá-lo.

  • Neste artigo faremos um modelo de postagem para postar uma imagem:

    A postagem consiste nos seguintes campos:

    1.Imagem
    2. Título ou descrição
    3. Data postada
    4.Autor da imagem.
  • Primeiro, importando os módulos necessários em models.py :

    de modelos de importação django.db
    de django.utils importar fuso horário
    from django.contrib.auth.models import User

    Agora, continuando com o módulo models.py, acrescente o seguinte snippet.

    filter_none

    editar
    fechar

    play_arrow

    link
    brilho_4
    código

    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)
    chevron_right
    
    
    filter_none
    
    
  • O nome do modelo é pós-modelo (pode ser qualquer um de sua escolha). Vamos entender os detalhes de cada campo utilizado.

    Campo de imagem: Este campo permite armazenar imagens no banco de dados. O valor padrão inclui uma imagem padrão que chamei de default_foo.png. Ela é salva automaticamente quando nenhuma imagem está disponível ou postada pelo usuário. Esta imagem está localizada em uma pasta chamada Media em seu diretório my_project. Se um usuário carregar uma imagem, ela será carregada no diretório chamado post_picture, definido pelo atributo upload_to.



    Legenda: Este campo representa a descrição da imagem nomeada como legenda para o campo da imagem.

    Postado na data : Este campo leva em consideração a hora e a data em que a imagem foi enviada. O valor padrão timezone.now economiza o tempo em que esta postagem é criada. A hora / data não é alterada se a postagem for atualizada posteriormente.

    Autor: este atributo leva em consideração o usuário postado nesta postagem. Leva o usuário django como parâmetro para fazer isso. O campo on_delete cuida de anormalidades que podem acontecer com a postagem se um usuário for excluído. Modelos, o campo em cascata exclui todos os dados de postagem relacionados ao usuário simultaneamente quando um usuário é excluído.

    Método __str__: esses métodos também são conhecidos como métodos mágicos em python. Ele leva a si mesmo como seus atributos. Este método mostra as informações do título para o administrador django no backend.

    método save: este método é substituído para salvar a postagem com valores personalizados do usuário. Se quisermos salvar imagens de um tamanho específico em nosso banco de dados, o método save é usado para fazer isso. Para isso, você deve importar PIL em seu módulo models.py para ler a imagem. Abra a imagem pelo método aberto em uma variável e armazene-a em um tamanho de saída específico em seu banco de dados para evitar o armazenamento de imagens grandes em seu banco de dados.

    Depois de criar com sucesso o pós-modelo, execute os seguintes comandos no terminal para fazer e salvar as alterações no banco de dados.

    python manage.py makemigrations
    python manage.py migrate

    Isso fará com que a tabela de postagem em seu banco de dados. Estou usando o banco de dados padrão django. 

  • Para visualizar suas tabelas e banco de dados, recomendo que você baixe o DB Browser para sqlite que fornecerá uma interface para visualizar e editar todos os seus esquemas.

    Depois de implementar seu modelo de postagem, agora é hora de implementar o recurso de comentário em sua postagem.

    1. Faça um formulário no módulo forms.py para obter os dados.
    2. Faça uma função para salvar ou excluir o comentário no módulo views.py.
    3. Obtenha os comentários do arquivo html.

    Importando módulos e pacotes necessários em models.py

    filter_none

    editar
    fechar

    play_arrow

    link
    brilho_4
    código

    from django.db import models
    from django.contrib.auth.models import User
    chevron_right
    
    
    filter_none
    
    

     

    Começando com o modelo, crie um comentário de modelo no módulo models.py em seu aplicativo.



    filter_none

    editar
    fechar

    play_arrow

    link
    brilho_4
    código

    class Comment(models.Model):
      post = models.ForeignKey(Post, on_delete = models.CASCADE, related_name ='comments')
      user = models.ForeignKey(User, on_delete = models.CASCADE)
      content = models.TextField()
    chevron_right
    
    
    filter_none
    
    

    Aqui, foriegnkey descreve a relação muitos-para-um com a postagem e o usuário. Cascade é muito útil para dados irrelevantes, por exemplo, se uma postagem ou o autor da postagem for excluído, não há necessidade de manter os dados desse usuário. O campo Cascade ajuda a excluir esses objetos e seus valores simultaneamente. 

    Nota: Não se esqueça de executar os comandos de migração (explicados acima na postagem)
    para salvar as alterações no banco de dados.
  • Faça um formulário para coletar o conteúdo do comentário no módulo forms.py . Se você não tiver form.py em seu aplicativo django, crie um.

    Django tem formulários embutidos para criá-lo e acessá-lo diretamente sem escrever um novo do zero.

    filter_none

    editar
    fechar

    play_arrow

    link
    brilho_4
    código

    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']
    chevron_right
    
    
    filter_none
    
    
  • Movendo para o módulo views.py , para processar e salvar os dados provenientes do formulário html, o código a seguir continua. Estou implementando o recurso de comentário no modo de exibição de detalhes da postagem, você pode usá-lo onde quiser, o método seria o mesmo.

    filter_none

    editar
    fechar

    play_arrow

    link
    brilho_4
    código

    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)
    chevron_right
    
    
    filter_none
    
    

     

    Importando o CommentForm do módulo forms.py, faça um objeto do commentform e verifique se ele é válido. Django fornece um recurso integrado para verificar as credenciais e o formato do formulário pelo método is_valid

  • Raspar o conteúdo da postagem pelo método get e criar um novo comentário pelo método create seguido pelo método Save salva os dados do objeto criado durante a criação de uma nova postagem no banco de dados.

    O objeto cf é passado para o html pelo dicionário de contexto para acessar todos os comentários em HTML.

    Por fim, para obter os dados do formulário html, é utilizada uma tag de formulário com o método utilizado como post, já que temos que enviar os dados para o servidor. O trecho a seguir mostra como o valor é obtido do formulário no html.

    filter_none

    editar
    fechar

    play_arrow

    link
    brilho_4
    código

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

    Aqui, Csrf_token é usado para fins de segurança. Django lida com a criptografia do formulário por meio deste token.



    O método as_p é usado para mostrar o formulário em forma de parágrafo para melhor visualização.

Resultado -

Caixa de comentários

Você pode mostrar todos os comentários por meio do loop for em HTML. Django fornece uma nova linguagem HTML para acessar dados e variáveis ​​passados ​​no contexto no módulo views.py que contém loops for, condições if-else etc.

Você pode ver esses recursos no meu projeto de site de mídia social no meu github.

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