Python Django使用forms实现评论功能完整指南

周末不加班
周末不加班
发布时间:2026-10-12| 2人浏览过
原创

本文详细介绍如何利用Django内置forms模块结合Model搭建网页评论功能。通过定义表单类与数据模型映射,配合视图处理POST请求与模板渲染,实现用户提交评论并实时同步展示。附带数据库迁移与运行调试步骤,帮助开发者快速掌握基础Web交互逻辑。

实现原理与设计思路

Django官方早已不再维护自带的comments应用,但在实际项目中自行实现轻量级评论需求非常常见。借助内置的 forms 模块,我们可以将前端表单验证与后端数据库模型无缝对接。核心思路是创建一个继承自 forms.Form 的类,其字段与数据库模型 models.Model 保持一致。视图层接收 POST 请求后,通过 form.is_valid() 清洗数据并保存至数据库,最后将历史数据与当前表单一同传递给模板渲染。

开发环境准备

  • 操作系统:Windows 7 64位 或任意主流系统
  • IDE:PyCharm 2016.1(推荐使用较新版本)
  • Python:2.7.11(现代开发建议升级至 Python 3.8+)
  • Django:1.9.6(代码逻辑兼容 DTM 3.x/4.x,仅需微调导入语句)

第1步:定义数据模型与表单类

在应用的 models.py 中,先定义存储评论的数据结构,随后创建对应的表单类。表单类的属性名需与模型严格对应,便于后期调用 cleaned_data。

from django.contrib import admin
from django.db import models
from django import forms

class RemarkForm(forms.Form):
    subject = forms.CharField(max_length=100, label='Mark Board')
    mail = forms.EmailField(label='email')
    topic = forms.ChoiceField(choices=(('l1','Bad'),('l2','SoSo'),('l3','Good')), label='choose one topic')
    message = forms.CharField(label='content', widget=forms.Textarea)
    cc_myself = forms.BooleanField(required=False, label='watch this')

class Remark(models.Model):
    subject = models.CharField(max_length=100)
    mail = models.EmailField()
    topic = models.CharField(max_length=100)
    message = models.CharField(max_length=300)
    cc_myself = models.BooleanField()

    # Django 3+ 建议使用 __str__ 替代 __unicode__
    def __str__(self):
        return self.subject

    class Meta:
        ordering = ['subject']

admin.site.register([Remark])

此处设计为简化示例,实际生产环境建议补充评论时间戳(如 created_time = models.DateTimeField(auto_now_add=True))以完善数据结构。

第2步:配置URL路由映射

编辑项目的 urls.py,将评论页面的访问路径指向对应的视图函数。保持路由简洁即可:

from django.conf.urls import url
from django.contrib import admin
from app.views import *

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^remark/$', remark_view),
]

第3步:编写视图层数据处理逻辑

视图文件负责拦截请求、校验表单数据、入库操作以及准备上下文变量。注意判断请求方法,避免刷新页面时重复提交数据。

from django.shortcuts import render
from app.models import *
from django.http import *

def remark_view(request):
    if request.method == "POST":
        form = RemarkForm(request.POST)
        if form.is_valid():
            new_remark = Remark()
            new_remark.subject = form.cleaned_data['subject']
            new_remail = form.cleaned_data['mail']
            new_remark.topic = form.cleaned_data['topic']
            new_remark.message = form.cleaned_data['message']
            new_remark.cc_myself = form.cleaned_data['cc_myself']
            new_remark.save()
    else:
        form = RemarkForm()

    ctx = {
        'form': form,
        'ties': Remark.objects.all()
    }
    return render(request, 'message.html', ctx)

第4步:搭建前端提交模板

在 templates/message.html 中利用循环自动渲染表单字段。关键点在于表单的 action="." 表示提交到当前页面,配合 CSRF Token 防护,即可完成无跳转的数据递交。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Comment Board</title>
</head>
<body>
<form action="." method="post">
  {% csrf_token %}
  {% for field in form %}
  <div>
    {{ field.label_tag }}:{{ field }}
    {{ field.errors }}
  </div>
  {% endfor %}
  <div>
    <input type="submit" value="Submit Remark">
  </div>
</form>
<hr>
{% for tie in ties %}
  <div>
    <ul>
      <li>{{ tie.subject }}</li>
      <li>{{ tie.mail }}</li>
      <li>{{ tie.topic }}</li>
      <li>{{ tie.message }}</li>
      <li>是否抄送: {{ tie.cc_myself }}</li>
    </ul>
    <hr>
  </div>
{% empty %}
  <p>暂无评论内容。</p>
{% endfor %}
</body>
</html>

第5步:执行数据库迁移与启动服务

默认使用 SQLite 无需额外配置连接池。打开终端依次执行以下命令完成表结构生成与超级管理员创建:

# 生成并执行迁移脚本
python manage.py makemigrations
python manage.py migrate

# 创建后台管理账号(按提示输入用户名、邮箱和密码)
python manage.py createsuperuser

# 启动本地开发服务器(默认端口 8000)
python manage.py runserver

验证效果与注意事项

访问 http://127.0.0.1:8000/admin 进入后台管理界面,验证数据是否正确写入。

Django Admin后台登录界面
Django后台管理系统入口

随后访问 http://127.0.0.1:8000/remark 测试前端表单提交与数据回显。

自定义评论表单页面
前端提交的Comment表单交互页

检查 SQLite 数据库文件或后台记录,确认字段值一致且格式符合预期。

数据库内存储的评论数据记录
底层SQLite数据库中保存的评论数据

至此,核心的增删改查流程已跑通。虽然未引入CSS美化,但数据流转逻辑已完备。实际部署时,可结合 AJAX 或 Fetch API 将表单的 action 改为异步请求接口,实现无刷新评论加载体验。

总结

本文梳理了使用 Django forms 模块构建独立评论组件的标准工作流。从模型字段映射、视图层安全校验、模板动态渲染到数据库迁移验证,完整覆盖了该场景下的核心知识点。掌握此类基于表单的 Web 交互模式后,可进一步扩展点赞、举报或富文本编辑器等进阶功能。以上就是使用Django forms模块开发网页评论功能的详细内容,更多关于Python Web开发实践的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。