Python Django使用forms实现评论功能完整指南
本文详细介绍如何利用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 进入后台管理界面,验证数据是否正确写入。

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

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

至此,核心的增删改查流程已跑通。虽然未引入CSS美化,但数据流转逻辑已完备。实际部署时,可结合 AJAX 或 Fetch API 将表单的 action 改为异步请求接口,实现无刷新评论加载体验。
总结
本文梳理了使用 Django forms 模块构建独立评论组件的标准工作流。从模型字段映射、视图层安全校验、模板动态渲染到数据库迁移验证,完整覆盖了该场景下的核心知识点。掌握此类基于表单的 Web 交互模式后,可进一步扩展点赞、举报或富文本编辑器等进阶功能。以上就是使用Django forms模块开发网页评论功能的详细内容,更多关于Python Web开发实践的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









