查看原文
其他

Django学习与实战(六):文章评论

2016-06-24 Django学习小组 编程派

编程派微信号:codingpy


本文系作者 Django学习小组 授权编程派原创发表,并经编程派编辑,转载请注明出处及微信ID(codingpy)。


通过前五周的时间我们开发了一个简单的个人 Blog,本周我们将实现 blog 文章的评论功能。(快速查看前五期内容,请点击文末链接)


实现思路


首先需要为评论(Comment)设计一个数据库表,并编写相应的 Model,将评论与文章关联,再编写发表评论的视图,设置相应的 url 即可。


评论的 Model 设计



请点击阅读原文,查看详细代码


参照大部分博客评论的样式,我们的 BlogComment Model 包含这些字段:


  • user_name:用户在评论前先要填写他们想使用的昵称

  • user_email:用户在评论前先要填写他们想使用的邮箱

  • body:用户提交的评论内容

  • created_time:评论提交时间

  • article:评论关联的文章,因为一个评论只能关联某一篇文章,而一篇文章下可能有多个评论,因此是一对多的关系,使用 ForeignKey


评论的表单


表单用来给服务器后台提交用户填写的数据,例如平时我们看到的填写登录、注册信息的页面就是一个登录、注册表单,用户填写表单信息后,点击提交按钮,表单中填写的内容就会打包发送给服务器后台。


我们需要为用户填写评论设置一个表单,django 的 form 模块为我们提供了自动生成表单的功能,如果对表单不熟悉请参阅: ,以了解基本的表单使用方法(如果你对表单感觉很陌生的话)。


下面我们使用 Django 的 ModelForm (  )类为我们自动生成表单。首先在 blog 目录下新建一个 forms.py (和 models.py 同一目录)文件用来存放 form 的代码:



请点击阅读原文,查看详细代码

视图函数


这里我们一如既往坚持使用基于类的通用视图,由于涉及到评论表单的提交处理,因此我们使用 FormView。这里对 FormView 的使用稍作讲解。


在 Django 的基于函数的视图中,涉及表单的处理的视图其逻辑一般是这样的:



请点击阅读原文,查看详细代码


即,首先判断用户是否通过表单 POST 了数据过来,如果是,则根据 POST 过来的数据构建一个表单,如果数据验证合法(form.is_valid),则创建评论,否则返回表单提交页。如果没有 POST 数据,则做其他相应的事情。FormView 把这些逻辑做了整合,无需写那么多 if else 语句:


请点击阅读原文,查看详细代码


为了方便地重定向回原来提交评论的文章详情页面,我们为文章(Article)的模型新增一个方法:get_absolute_url,调用该方法将得到该 Article 对应的 url,例如这是文章 1 的 url: /article/1,这样调用 HttpResponseRedirect 后将返回该 url 下的文章详情页。


请点击阅读原文,查看详细代码


同时为了在详情页渲染一个评论表单,稍微修改一下 ArticleDetailView 的视图函数,把评论表单 form 插入模板上下文中:


请点击阅读原文,查看详细代码

URL 设置




设置模板文件


新增了一个 comment.html 文件以渲染评论表单和评论列表,并且修改了 detail.html 文件以在文章详情页显示评论表单和评论列表,修改了blog/tatic 下的 style.css 为评论添加样式,由于代码比较多,就不贴出来了,主要是 html 和 css 的前端相关代码,请到 更新相关的模板和静态资源文件。


至此,整个评论功能的框架做好了,显示效果如下:



当然这只是一个评论的框架,很多细节有待处理和完善,但无论如何,用户已经可以为我们的文章发表评论意见了。


前情回顾


第一周Django学习与实战(一):编写博客的 Model 和首页面

第二周Django学习与实战(二):博客详情页面和分类页面

第三周Django学习与实战(三):文章列表分页和代码语法高亮

第四周Django学习与实战(四):基于类的通用视图详解

第五周Django学习与实战(五):标签云与文章归档

Django学习小组简介

django学习小组是一个促进 django 新手互相学习、互相帮助的组织。小组在一边学习 django 的同时将一起完成几个项目,包括:

  • 一个简单的 django 博客,用于发布小组每周的学习和开发文档;

  • django中国社区,为国内的 django 开发者们提供一个长期维护的 django 社区;

上面所说的这个社区类似于 segmentfault 和 stackoverflow ,但更加专注(只专注于 django 开发的问题)。更多的信息请关注我们的 ,本教程项目的相关源代码也已上传到 github 上。同时,你也可以加入我们的邮件列表 ,随时关注我们的动态。我们会将每周的详细开发文档和代码通过邮件列表发出。

如有任何建议,欢迎提 Issue,欢迎 fork,pr,当然也别忘了 star 哦!

最后插播一句,昨天发布的2016年春季互联网高端人才流动报告(可直接点击阅读)一文所获广告费,将拿出一大部分回馈编程派的读者,具体形式欢迎留言提建议。剧透,阅读数与广告费成正比哦。


【精华推荐】

Python性能分析大全

2016年春季互联网高端人才流动报告

硅谷码农是这样秀逼格、撩妹子的!



您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存