django--博客项目--利用form表单提交评论。

这次主要是针对评论功能进行一个完善,上一篇只是简单的提到怎么提交表单并且对用户进行验证。

django--博客项目--利用form表单提交评论。

这篇博客的最终效果图如下

django--博客项目--利用form表单提交评论。主要要写的是如何提交评论并且将评论显示在页面上。

不过在这之前先说明一下,上一篇博客我们知道在登陆成功之后会跳转回首页。但是我们想要的效果是在登陆成功之后仍然停留在当前页面。django里面就有这样一种方法可以实现这种操作。

django--博客项目--利用form表单提交评论。

图中的request.META是一个字典,里面包含了我们的请求头,其中就包括该网页的链接,因此我们可以通过这样的方式来得到网页链接,并且最后通过redirect(referer)重定向回该页面即可。

那么讲完这个就开始我们的评论功能的实现。

按照惯例还是先贴上完整的代码然后逐步分析。

django--博客项目--利用form表单提交评论。

这里假设已经是登录状态了,所以user.username就表示登录的用户名。

为了把评论显示在页面上,我们需要评论者,评论时间,评论内容,

再看一下Comment这个model

django--博客项目--利用form表单提交评论。

这里我已经设置了comment_time了,也就是评论的时间,所以我们要做的实际上就是把评论的内容提交上去就可以了。

django--博客项目--利用form表单提交评论。

因为评论之后的数据是要进入数据库的,因此我们要明确的一点就是谁评论了哪一篇博客,所以我们在提交评论的时候,也要把被评论的博客的相关的信息也提交上去,这里提交了博客的id和content_type。

在上上个图里面我们可以找到提交的数据是提交给网址名为update_comment这个地方处理的,我们去看看urls.py

django--博客项目--利用form表单提交评论。

很好,我们发现提交的数据会进一步交给views.py里面的update_comment函数来处理,所以我们去看看这个函数长什么样。

django--博客项目--利用form表单提交评论。

第一句我们之前就说过了,是为了提交评论后能够重定向到当前页面,也不是回到首页,或者其他的页面。

接下来我们要判断的就是判断用户名是否通过验证还有就是判断评论的内容是否为空,如果为空的话就要提示错误信息。

重点是下面的try里面的东西。

首先我们通过request.POST.get()来获取评论的博客的content_type,如果为空那么就为空字符串

下面同理,但是我们这里需要用Int()进行类型转换的原因是我们提交表单的时候的object_id是一个字符串。

最关键的是下面这个

因为我们不能直接得到该content_type类型的信息(其实我觉得可以通过from blog.models import Blog 来搞定的,不过我感觉不这样做的原因是为了实现通用性。)所以我们这里利用ContentType来得到content_type对应的信息,后面的model_class()的意思是,我们先通过content_type找到了其所在的表,因为django里面在models.py里面的那些class其实就是映射成表的,所以找到表之后,我们就能通博客所具有的object_id就能找到这篇博客了。

现在博客有了,评论也有了,用户也有了,我们就能将这些数据保存到后台。这样我们进入后台,就能知道是谁在什么时间评论了哪一篇博客。