创建Django项目的评论系统

创建Django项目的评论系统

在帖子上发表评论是一个帖子最常见的功能,在Django中实现这个功能比其他框架更容易。要实现这个功能,需要遵循一些步骤,但首先让我们从创建一个新项目开始。

如何在Django中创建评论功能

  • 打开命令提示符,运行以下命令。

开始一个新的django项目为。

django-admin startproject my_project
Python

执行这个命令后,你会看到django为你创建的以下文件和文件夹。要看到这个文件夹,你可以在命令提示符上使用树形命令,或者在一个思想库中打开这个文件夹,在我的例子中,我使用了sublime text editor

创建评论系统的Django项目

创建一个新的应用程序为。

python manage.py startapp portfolio_app
Python

Django会自动创建文件,这样你就可以专注于你的任务,而不必为其他事情而烦恼,比如制作文件和结构化文件。

创建评论系统的Django项目

在这篇文章中,我们将制作一个帖子模型来发布图片。

该职位包括以下领域。

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

首先,在models.py中导入所需模块。

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

现在,继续使用models.py模块,附加以下代码。

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)
Python

该模型的名称是职位模型(可以是你选择的任何一个)。让我们来了解一下所使用的每个文件的细节。

图像字段:这个字段允许在数据库中存储图像。默认值包括一个默认的图片,我把它命名为default_foo.png。当没有图片或用户发布的图片时,它会自动保存。该图片位于my_project目录下一个名为Media的文件夹中。如果用户上传图片,它会被上传到名为post_picture的目录中,由upload_to属性设置。

标题:该字段描述了图像的描述,被命名为图像字段的标题。

发布日期 。这个字段考虑到了图片上传的时间和日期。默认值timezone.now保存了这个帖子的创建时间。如果该帖子在发布后被更新,时间/日期不会被改变。

作者:这个属性考虑到了发布这个帖子的用户。它以django用户作为参数来做这件事。如果一个用户被删除,on_delete文件会照顾到可能发生在帖子上的异常情况。模型,当一个用户被删除时,级联字段会同时删除所有与用户相关的帖子数据。

__str__方法:这些方法在python中也被称为魔法方法。它将self作为其属性。该方法将标题信息显示给后台的django管理员。

save方法:此方法被覆盖,以保存用户自定义的值。如果我们想在数据库中保存特定大小的图像,save方法被用来这样做。为此,你必须在你的models.py模块中导入PIL来读取图片。通过open方法将图片打开到一个变量中,并将其以特定的输出大小存储在你的数据库中,以避免在数据库中存储大的图片。

在成功创建职位模型后,在终端上运行以下命令,在数据库中做出并保存更改。

python manage.py makemigrations
python manage.py migrate
Python

这将在你的数据库中制作帖子表。我使用的是django默认数据库。

为了可视化你的表和数据库,我建议你下载DB Browser for sqlite,它将为你提供一个界面来查看、编辑你的所有模式。_

在实现了你的帖子模型之后,现在是在你的帖子上实现评论功能的时候了。

1.在forms.py模块中制作一个表单来获取数据。
2.在views.py模块中制作一个保存或删除评论的函数。
3.从html文件中获取注释。

在forms.py模块中制作一个表单来收集评论的内容。如果你的django应用程序中没有form.py,那么创建一个。

Django有内置的表单来创建它并直接访问它,而不需要从头开始写一个新的表单。

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']
Python

转到views.py模块,处理和保存来自html表单的数据,下面的代码继续。我在帖子细节视图中实现了评论功能,你可以在任何你想用的地方使用它,方法是一样的。

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)
Python

从forms.py模块中导入CommentForm,制作一个commentform的对象并检查它是否有效。Django提供了内置的功能,通过is_valid方法来检查表单的凭证和格式。

通过get方法抓取帖子的内容,通过create方法创建一个新的评论,然后通过Save方法将创建新帖子时的对象数据保存在数据库中。

cf对象通过上下文字典传入html,以访问HTML中的所有评论。

最后,为了从html表单中获取数据,使用了一个表单标签,方法是post,因为我们必须将数据发送到服务器。下面的片段显示了如何从html中的表单中获取数值。

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

这里,Csrf_token被用于安全目的。Django通过这个令牌来处理表单的加密问题。

as_p方法用于以段落方式显示表单,以获得更好的视觉效果。

输出 –

创建评论系统的Django项目

你可以通过HTML中的for循环来显示所有的评论。Django提供了新的HTML语言来访问views.py模块中上下文传递的数据和变量,其中包含for循环、if-else条件等。

你可以在我的github中的社交媒体网站项目中查看这个功能。

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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册