📜  Django项目创建一个评论系统(1)

📅  最后修改于: 2023-12-03 15:30:30.943000             🧑  作者: Mango

Django项目创建一个评论系统

在网站开发中,评论系统是必不可少的一个功能,它可以让用户在博客、论坛等网站上发表评论,与其他用户进行交流。在Django框架下,我们可以很容易地实现一个评论系统,让用户可以热烈讨论话题。

1. 环境搭建

首先,我们需要安装好Django框架。使用pip命令:

pip install django

我们还需要安装好其他必要的依赖,比如数据库驱动(MySQL、PostgreSQL、SQLite等),在这里我们使用默认的SQLite数据库。

2. 数据库建模

我们使用Django提供的ORM(对象关系映射)来实现数据持久化。我们需要定义一个评论模型,包含以下字段:

评论人、评论时间、评论内容、所属文章。

from django.db import models

class Comment(models.Model):
    user = models.CharField(max_length=100)
    time = models.DateTimeField(auto_now_add=True)
    content = models.TextField()
    article = models.ForeignKey(Article, on_delete=models.CASCADE)

在这里,我们使用了外键ForeignKey来关联文章模型,on_delete=models.CASCADE表示当文章被删除时,对应的评论也会被删除。

3. URL配置

接下来,我们需要在urls.py中配置评论相关的URL。我们可以通过正则表达式来匹配相应的URL,然后将其指向对应的视图函数。

from django.urls import path
from . import views

urlpatterns = [
    path('article/<int:article_id>/comments/', views.comments, name='comments'),
    path('comments/', views.all_comments, name='all_comments'),
]

在这里,我们定义了两个URL。第一个URL是/article/int:article_id/comments/,其中int:article_id表示URL参数,指定文章id。当用户访问这个URL时,我们将其指向视图函数comments。

第二个URL是/comments/,没有参数,当用户访问这个URL时,我们将其指向视图函数all_comments。

4. 视图函数实现

在这一步,我们需要实现上一步中定义的两个视图函数:comments和all_comments。其中,comments视图函数用来添加新评论,all_comments视图函数用来展示所有评论。

from django.shortcuts import get_object_or_404, render
from django.http import HttpResponse
from .models import Comment, Article

def comments(request, article_id):
    article = get_object_or_404(Article, pk=article_id)
    if request.method == 'POST':
        user = request.POST.get('user')
        content = request.POST.get('content')
        comment = Comment(user=user, content=content, article=article)
        comment.save()
    return render(request, 'comments.html', {'article': article})

def all_comments(request):
    comments = Comment.objects.order_by('-time')
    return render(request, 'all_comments.html', {'comments': comments})

在这里,我们使用了Django自带的render函数来渲染模板。在comments视图函数中,我们首先获取文章对象,然后判断请求方法是否为POST。如果是POST,我们从表单中获取评论人和评论内容,然后创建一个新的Comment对象,将其保存到数据库中。

在all_comments视图函数中,我们获取所有评论,按时间倒序排序,然后将其传递给模板。

5. 模板开发

最后一步是开发模板,我们需要定义一个包含表单的页面,在页面中用户可以填写评论并提交。

{% extends 'base.html' %}

{% block content %}
  <h2>{{ article.title }}</h2>
  <p>{{ article.content }}</p>

  <hr>

  <h3>Add a comment</h3>
  <form method="post">
    {% csrf_token %}
    <div class="form-group">
      <label for="user">Name:</label>
      <input class="form-control" type="text" id="user" name="user">
    </div>
    <div class="form-group">
      <label for="content">Comment:</label>
      <textarea class="form-control" id="content" name="content"></textarea>
    </div>
    <button class="btn btn-primary" type="submit">Submit</button>
  </form>

  <hr>

  <h3>Comments</h3>
  {% for comment in comments %}
    <div class="card">
      <div class="card-body">
        <h5 class="card-title">{{ comment.user }}</h5>
        <p class="card-text">{{ comment.content }}</p>
      </div>
    </div>
  {% empty %}
    <p>No comments yet.</p>
  {% endfor %}
{% endblock %}

在模板中,我们使用Django模板标签来渲染动态内容,比如文章标题、内容、评论等。在表单中,我们使用了{% csrf_token %}模板标签,用来防止CSRF攻击。{% for %}和{% empty %}模板标签用来循环渲染所有评论。

至此,我们已经完成了Django项目创建一个评论系统的全部步骤。用户可以在网站上添加评论,其他用户可以看到所有的评论并进行回复和讨论。